Browse Source

Forced Third Party commit

Danny Reidenbach 5 years ago
parent
commit
4af74259b1
100 changed files with 3822 additions and 5209 deletions
  1. 1 1
      .github/ISSUE_TEMPLATE/bug_report.md
  2. 1 1
      .github/ISSUE_TEMPLATE/cleanup_request.md
  3. 1 1
      .github/ISSUE_TEMPLATE/feature_request.md
  4. 1 1
      .github/ISSUE_TEMPLATE/question.md
  5. 15 17
      .github/change_repo_manager.sh
  6. 1 1
      .github/pull_request_template.md
  7. 115 404
      BUILD
  8. 105 243
      BUILD.gn
  9. 276 352
      CMakeLists.txt
  10. 368 518
      Makefile
  11. 1 0
      PYTHON-MANIFEST.in
  12. 21 14
      Rakefile
  13. 4 14
      bazel/grpc_deps.bzl
  14. 3 6
      bazel/python_rules.bzl
  15. 2 0
      bazel/test/python_test_repo/BUILD
  16. 3 0
      bazel/test/python_test_repo/WORKSPACE
  17. 165 0
      bazel/test/python_test_repo/namespaced/upper/example/BUILD
  18. 35 0
      bazel/test/python_test_repo/namespaced/upper/example/import_no_strip_test.py
  19. 35 0
      bazel/test/python_test_repo/namespaced/upper/example/import_strip_test.py
  20. 27 0
      bazel/test/python_test_repo/namespaced/upper/example/namespaced_dependency.proto
  21. 38 0
      bazel/test/python_test_repo/namespaced/upper/example/namespaced_example.proto
  22. 35 0
      bazel/test/python_test_repo/namespaced/upper/example/no_import_no_strip_test.py
  23. 35 0
      bazel/test/python_test_repo/namespaced/upper/example/no_import_strip_test.py
  24. 242 513
      build_autogenerated.yaml
  25. 4 2
      build_handwritten.yaml
  26. 3 0
      cmake/re2.cmake
  27. 117 138
      config.m4
  28. 133 141
      config.w32
  29. 2 1
      doc/g_stands_for.md
  30. 6 6
      doc/grpc_release_schedule.md
  31. 3 2
      doc/grpc_xds_features.md
  32. 1 0
      doc/python/sphinx/grpc.rst
  33. 3 1
      doc/xds-test-descriptions.md
  34. 11 17
      examples/README.md
  35. 105 253
      gRPC-C++.podspec
  36. 157 372
      gRPC-Core.podspec
  37. 1 1
      gRPC-ProtoRPC.podspec
  38. 1 1
      gRPC-RxLibrary.podspec
  39. 1 1
      gRPC.podspec
  40. 1 1
      grpc.def
  41. 204 244
      grpc.gemspec
  42. 106 252
      grpc.gyp
  43. 31 14
      include/grpc/grpc_security.h
  44. 6 1
      include/grpc/impl/codegen/port_platform.h
  45. 45 22
      include/grpcpp/create_channel.h
  46. 0 78
      include/grpcpp/create_channel_impl.h
  47. 25 7
      include/grpcpp/ext/proto_server_reflection_plugin.h
  48. 0 55
      include/grpcpp/ext/proto_server_reflection_plugin_impl.h
  49. 21 10
      include/grpcpp/ext/server_load_reporting.h
  50. 0 54
      include/grpcpp/ext/server_load_reporting_impl.h
  51. 197 2
      include/grpcpp/generic/generic_stub.h
  52. 0 216
      include/grpcpp/generic/generic_stub_impl.h
  53. 1 1
      include/grpcpp/impl/codegen/call_op_set.h
  54. 6 7
      include/grpcpp/impl/codegen/client_context_impl.h
  55. 2 2
      include/grpcpp/impl/codegen/server_interface.h
  56. 34 3
      include/grpcpp/security/auth_metadata_processor.h
  57. 0 61
      include/grpcpp/security/auth_metadata_processor_impl.h
  58. 267 89
      include/grpcpp/security/credentials.h
  59. 0 356
      include/grpcpp/security/credentials_impl.h
  60. 1 4
      include/grpcpp/security/cronet_credentials.h
  61. 50 25
      include/grpcpp/security/server_credentials.h
  62. 0 89
      include/grpcpp/security/server_credentials_impl.h
  63. 2 2
      include/grpcpp/security/tls_credentials_options.h
  64. 4 4
      include/grpcpp/server_builder.h
  65. 4 4
      include/grpcpp/server_builder_impl.h
  66. 2 3
      include/grpcpp/support/channel_arguments_impl.h
  67. 14 10
      include/grpcpp/support/error_details.h
  68. 207 247
      package.xml
  69. 17 11
      src/boringssl/boringssl_prefix_symbols.h
  70. 51 13
      src/compiler/objective_c_plugin.cc
  71. 6 8
      src/compiler/ruby_generator.cc
  72. 4 5
      src/compiler/ruby_generator_string-inl.h
  73. 62 40
      src/core/ext/filters/client_channel/client_channel.cc
  74. 2 0
      src/core/ext/filters/client_channel/config_selector.h
  75. 24 2
      src/core/ext/filters/client_channel/global_subchannel_pool.cc
  76. 5 1
      src/core/ext/filters/client_channel/health/health_check_client.cc
  77. 2 3
      src/core/ext/filters/client_channel/http_connect_handshaker.cc
  78. 2 0
      src/core/ext/filters/client_channel/lb_policy.h
  79. 6 4
      src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc
  80. 50 27
      src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc
  81. 0 13
      src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc
  82. 0 3
      src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h
  83. 1 37
      src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc
  84. 19 13
      src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
  85. 29 10
      src/core/ext/filters/client_channel/lb_policy/priority/priority.cc
  86. 5 4
      src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc
  87. 23 13
      src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc
  88. 17 11
      src/core/ext/filters/client_channel/lb_policy/xds/cds.cc
  89. 19 11
      src/core/ext/filters/client_channel/lb_policy/xds/eds.cc
  90. 16 7
      src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc
  91. 66 33
      src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc
  92. 5 2
      src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
  93. 2 1
      src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc
  94. 2 2
      src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc
  95. 3 3
      src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc
  96. 6 2
      src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
  97. 21 18
      src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc
  98. 0 1
      src/core/ext/filters/client_channel/resolver_result_parsing.h
  99. 5 4
      src/core/ext/filters/client_channel/resolving_lb_policy.cc
  100. 44 22
      src/core/ext/filters/client_channel/subchannel.cc

+ 1 - 1
.github/ISSUE_TEMPLATE/bug_report.md

@@ -2,7 +2,7 @@
 name: Report a bug
 about: Create a report to help us improve
 labels: kind/bug, priority/P2
-assignees: veblush
+assignees: markdroth
 
 ---
 

+ 1 - 1
.github/ISSUE_TEMPLATE/cleanup_request.md

@@ -2,7 +2,7 @@
 name: Request a cleanup
 about: Suggest a cleanup in our repository
 labels: kind/internal cleanup, priority/P2
-assignees: veblush
+assignees: markdroth
 
 ---
 

+ 1 - 1
.github/ISSUE_TEMPLATE/feature_request.md

@@ -2,7 +2,7 @@
 name: Request a feature
 about: Suggest an idea for this project
 labels: kind/enhancement, priority/P2
-assignees: veblush
+assignees: markdroth
 
 ---
 

+ 1 - 1
.github/ISSUE_TEMPLATE/question.md

@@ -2,7 +2,7 @@
 name: Ask a question
 about: Ask a question
 labels: kind/question, priority/P3
-assignees: veblush
+assignees: markdroth
 
 ---
 

+ 15 - 17
test/distrib/cpp/run_distrib_test_routeguide.sh → .github/change_repo_manager.sh

@@ -1,5 +1,6 @@
 #!/bin/bash
-# Copyright 2016 gRPC authors.
+#
+# Copyright 2020 The gRPC authors.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -13,25 +14,22 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-set -ex
-
-# change to grpc repo root
-cd "$(dirname "$0")/../../.."
-
-cd third_party/protobuf && ./autogen.sh && \
-./configure && make -j4 && make install && ldconfig
-
-cd ../.. && make -j4 && make install
-
-cd examples/cpp/helloworld
+set -e
 
-make
+if [ $# -lt 1 ];then
+  echo "Usage: $0 github-id"
+  exit 1
+fi
 
-make clean
+echo "Change a repo manager to $0"
 
-cd ../../../examples/cpp/route_guide
+BASE_PATH=$(dirname $0)
 
-make
+for file in bug_report.md cleanup_request.md feature_request.md question.md
+do
+	sed -i -E "s/assignees: ([a-zA-Z0-9-]+)/assignees: $1/" $BASE_PATH/ISSUE_TEMPLATE/$file
+done
 
-make clean
+sed -i -E "s/^@([a-zA-Z0-9-]+)/@$1/" $BASE_PATH/pull_request_template.md
 
+echo "Done"

+ 1 - 1
.github/pull_request_template.md

@@ -8,4 +8,4 @@ If you know who should review your pull request, please remove the mentioning be
 
 -->
 
-@veblush
+@markdroth

+ 115 - 404
BUILD

@@ -74,12 +74,12 @@ config_setting(
 
 python_config_settings()
 
-# This should be updated along with build.yaml
-g_stands_for = "galore"
+# This should be updated along with build_handwritten.yaml
+g_stands_for = "giggle"
 
-core_version = "10.0.0"
+core_version = "11.0.0"
 
-version = "1.31.0-dev"
+version = "1.32.0-dev"
 
 GPR_PUBLIC_HDRS = [
     "include/grpc/support/alloc.h",
@@ -225,12 +225,10 @@ GRPCXX_PUBLIC_HDRS = [
     "include/grpcpp/completion_queue.h",
     "include/grpcpp/completion_queue_impl.h",
     "include/grpcpp/create_channel.h",
-    "include/grpcpp/create_channel_impl.h",
     "include/grpcpp/create_channel_posix.h",
     "include/grpcpp/ext/health_check_service_server_builder_option.h",
     "include/grpcpp/generic/async_generic_service.h",
     "include/grpcpp/generic/generic_stub.h",
-    "include/grpcpp/generic/generic_stub_impl.h",
     "include/grpcpp/grpcpp.h",
     "include/grpcpp/health_check_service_interface.h",
     "include/grpcpp/impl/call.h",
@@ -251,11 +249,8 @@ GRPCXX_PUBLIC_HDRS = [
     "include/grpcpp/resource_quota.h",
     "include/grpcpp/security/auth_context.h",
     "include/grpcpp/security/auth_metadata_processor.h",
-    "include/grpcpp/security/auth_metadata_processor_impl.h",
     "include/grpcpp/security/credentials.h",
-    "include/grpcpp/security/credentials_impl.h",
     "include/grpcpp/security/server_credentials.h",
-    "include/grpcpp/security/server_credentials_impl.h",
     "include/grpcpp/security/tls_credentials_options.h",
     "include/grpcpp/server.h",
     "include/grpcpp/server_impl.h",
@@ -412,7 +407,6 @@ grpc_cc_library(
     hdrs = [
         "include/grpc++/support/error_details.h",
         "include/grpcpp/support/error_details.h",
-        "include/grpcpp/support/error_details_impl.h",
     ],
     language = "c++",
     standalone = True,
@@ -555,9 +549,11 @@ grpc_cc_library(
         "src/core/lib/profiling/timers.h",
     ],
     external_deps = [
+        "absl/base",
         "absl/memory",
         "absl/strings",
         "absl/strings:str_format",
+        "absl/synchronization",
         "absl/time:time",
     ],
     language = "c++",
@@ -800,6 +796,7 @@ grpc_cc_library(
         "src/core/lib/surface/server.cc",
         "src/core/lib/surface/validate_metadata.cc",
         "src/core/lib/surface/version.cc",
+        "src/core/lib/transport/authority_override.cc",
         "src/core/lib/transport/bdp_estimator.cc",
         "src/core/lib/transport/byte_stream.cc",
         "src/core/lib/transport/connectivity_state.cc",
@@ -921,11 +918,9 @@ grpc_cc_library(
         "src/core/lib/json/json.h",
         "src/core/lib/slice/b64.h",
         "src/core/lib/slice/percent_encoding.h",
-        "src/core/lib/slice/slice_hash_table.h",
         "src/core/lib/slice/slice_internal.h",
         "src/core/lib/slice/slice_string_helpers.h",
         "src/core/lib/slice/slice_utils.h",
-        "src/core/lib/slice/slice_weak_hash_table.h",
         "src/core/lib/surface/api_trace.h",
         "src/core/lib/surface/call.h",
         "src/core/lib/surface/call_test_only.h",
@@ -939,6 +934,7 @@ grpc_cc_library(
         "src/core/lib/surface/lame_client.h",
         "src/core/lib/surface/server.h",
         "src/core/lib/surface/validate_metadata.h",
+        "src/core/lib/transport/authority_override.h",
         "src/core/lib/transport/bdp_estimator.h",
         "src/core/lib/transport/byte_stream.h",
         "src/core/lib/transport/connectivity_state.h",
@@ -958,6 +954,7 @@ grpc_cc_library(
     external_deps = [
         "madler_zlib",
         "absl/container:inlined_vector",
+        "absl/status",
         "absl/types:optional",
     ],
     language = "c++",
@@ -1299,12 +1296,10 @@ grpc_cc_library(
     ],
     external_deps = [
         "upb_lib",
-        "upb_textformat_lib",
         "re2",
     ],
     language = "c++",
     deps = [
-        "envoy_ads_upbdefs",
         "grpc_base",
     ],
 )
@@ -1326,7 +1321,6 @@ grpc_cc_library(
     language = "c++",
     deps = [
         "envoy_ads_upb",
-        "envoy_ads_upbdefs",
         "grpc_base",
         "grpc_client_channel",
         "grpc_xds_api_header",
@@ -1350,7 +1344,6 @@ grpc_cc_library(
     language = "c++",
     deps = [
         "envoy_ads_upb",
-        "envoy_ads_upbdefs",
         "grpc_base",
         "grpc_client_channel",
         "grpc_secure",
@@ -1610,7 +1603,6 @@ grpc_cc_library(
     language = "c++",
     public_hdrs = [
         "include/grpcpp/ext/server_load_reporting.h",
-        "include/grpcpp/ext/server_load_reporting_impl.h",
     ],
     deps = [
         "lb_server_load_reporting_filter",
@@ -1813,7 +1805,6 @@ grpc_cc_library(
         "src/core/lib/security/transport/secure_endpoint.cc",
         "src/core/lib/security/transport/security_handshaker.cc",
         "src/core/lib/security/transport/server_auth_filter.cc",
-        "src/core/lib/security/transport/target_authority_table.cc",
         "src/core/lib/security/transport/tsi_error.cc",
         "src/core/lib/security/util/json_util.cc",
         "src/core/lib/surface/init_secure.cc",
@@ -1850,7 +1841,6 @@ grpc_cc_library(
         "src/core/lib/security/transport/auth_filters.h",
         "src/core/lib/security/transport/secure_endpoint.h",
         "src/core/lib/security/transport/security_handshaker.h",
-        "src/core/lib/security/transport/target_authority_table.h",
         "src/core/lib/security/transport/tsi_error.h",
         "src/core/lib/security/util/json_util.h",
     ],
@@ -2345,7 +2335,6 @@ grpc_cc_library(
     public_hdrs = [
         "include/grpc++/ext/proto_server_reflection_plugin.h",
         "include/grpcpp/ext/proto_server_reflection_plugin.h",
-        "include/grpcpp/ext/proto_server_reflection_plugin_impl.h",
     ],
     deps = [
         ":grpc++",
@@ -2505,76 +2494,69 @@ grpc_cc_library(
 grpc_cc_library(
     name = "envoy_ads_upb",
     srcs = [
-        "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cds.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/eds.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/lds.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/rds.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/srds.upb.c",
-        "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c",
-        "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c",
-        "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c",
-        "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c",
-        "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c",
-        "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c",
-    ],
-    hdrs = [
-        "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cds.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/eds.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/lds.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/rds.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/srds.upb.h",
-        "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h",
-        "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h",
-        "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h",
-        "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h",
-        "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h",
-        "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h",
+        "src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c",
+        "src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c",
+        "src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c",
+        "src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c",
+        "src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c",
+        "src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c",
+        "src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c",
+        "src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c",
+        "src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c",
+        "src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c",
+        "src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c",
+        "src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c",
+        "src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c",
+        "src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c",
+    ],
+    hdrs = [
+        "src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h",
+        "src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h",
+        "src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h",
+        "src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h",
+        "src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h",
+        "src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h",
+        "src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h",
+        "src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h",
+        "src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h",
+        "src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h",
+        "src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h",
+        "src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h",
+        "src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h",
+        "src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h",
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
     deps = [
@@ -2587,97 +2569,6 @@ grpc_cc_library(
     ],
 )
 
-grpc_cc_library(
-    name = "envoy_ads_upbdefs",
-    srcs = [
-        "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c",
-    ],
-    hdrs = [
-        "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.h",
-    ],
-    external_deps = [
-        "upb_lib",
-        "upb_lib_descriptor",
-        "upb_textformat_lib",
-    ],
-    language = "c++",
-    deps = [
-        ":envoy_ads_upb",
-        ":envoy_annotations_upbdefs",
-        ":envoy_core_upbdefs",
-        ":envoy_type_upbdefs",
-        ":google_api_upbdefs",
-        ":proto_gen_validate_upbdefs",
-        ":udpa_annotations_upbdefs",
-    ],
-)
-
 grpc_cc_library(
     name = "envoy_annotations_upb",
     srcs = [
@@ -2690,7 +2581,6 @@ grpc_cc_library(
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
     deps = [
@@ -2698,57 +2588,36 @@ grpc_cc_library(
     ],
 )
 
-grpc_cc_library(
-    name = "envoy_annotations_upbdefs",
-    srcs = [
-        "src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c",
-    ],
-    hdrs = [
-        "src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.h",
-    ],
-    external_deps = [
-        "upb_lib",
-        "upb_lib_descriptor",
-        "upb_textformat_lib",
-    ],
-    language = "c++",
-    deps = [
-        ":envoy_annotations_upb",
-        ":google_api_upbdefs",
-    ],
-)
-
 grpc_cc_library(
     name = "envoy_core_upb",
     srcs = [
-        "src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c",
-    ],
-    hdrs = [
-        "src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c",
+    ],
+    hdrs = [
+        "src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h",
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
     deps = [
@@ -2760,71 +2629,30 @@ grpc_cc_library(
     ],
 )
 
-grpc_cc_library(
-    name = "envoy_core_upbdefs",
-    srcs = [
-        "src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c",
-    ],
-    hdrs = [
-        "src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.h",
-    ],
-    external_deps = [
-        "upb_lib",
-        "upb_lib_descriptor",
-        "upb_textformat_lib",
-    ],
-    language = "c++",
-    deps = [
-        ":envoy_core_upb",
-        ":envoy_type_upbdefs",
-        ":google_api_upbdefs",
-        ":proto_gen_validate_upbdefs",
-    ],
-)
-
 grpc_cc_library(
     name = "envoy_type_upb",
     srcs = [
-        "src/core/ext/upb-generated/envoy/type/http.upb.c",
-        "src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c",
-        "src/core/ext/upb-generated/envoy/type/matcher/string.upb.c",
-        "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c",
-        "src/core/ext/upb-generated/envoy/type/percent.upb.c",
-        "src/core/ext/upb-generated/envoy/type/range.upb.c",
-        "src/core/ext/upb-generated/envoy/type/semantic_version.upb.c",
-        "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c",
-    ],
-    hdrs = [
-        "src/core/ext/upb-generated/envoy/type/http.upb.h",
-        "src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h",
-        "src/core/ext/upb-generated/envoy/type/matcher/string.upb.h",
-        "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h",
-        "src/core/ext/upb-generated/envoy/type/percent.upb.h",
-        "src/core/ext/upb-generated/envoy/type/range.upb.h",
-        "src/core/ext/upb-generated/envoy/type/semantic_version.upb.h",
-        "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h",
+        "src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c",
+        "src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c",
+        "src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c",
+        "src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c",
+        "src/core/ext/upb-generated/envoy/type/v3/http.upb.c",
+        "src/core/ext/upb-generated/envoy/type/v3/percent.upb.c",
+        "src/core/ext/upb-generated/envoy/type/v3/range.upb.c",
+        "src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c",
+    ],
+    hdrs = [
+        "src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h",
+        "src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h",
+        "src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h",
+        "src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h",
+        "src/core/ext/upb-generated/envoy/type/v3/http.upb.h",
+        "src/core/ext/upb-generated/envoy/type/v3/percent.upb.h",
+        "src/core/ext/upb-generated/envoy/type/v3/range.upb.h",
+        "src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h",
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
     deps = [
@@ -2835,37 +2663,6 @@ grpc_cc_library(
     ],
 )
 
-grpc_cc_library(
-    name = "envoy_type_upbdefs",
-    srcs = [
-        "src/core/ext/upb-generated/envoy/type/http.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/percent.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/range.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c",
-    ],
-    hdrs = [
-        "src/core/ext/upb-generated/envoy/type/http.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/percent.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/range.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.h",
-    ],
-    external_deps = [
-        "upb_lib",
-        "upb_lib_descriptor",
-        "upb_textformat_lib",
-    ],
-    language = "c++",
-    deps = [
-        ":envoy_type_upb",
-        ":google_api_upbdefs",
-        ":proto_gen_validate_upbdefs",
-    ],
-)
-
 grpc_cc_library(
     name = "proto_gen_validate_upb",
     srcs = [
@@ -2878,7 +2675,6 @@ grpc_cc_library(
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
     deps = [
@@ -2886,28 +2682,6 @@ grpc_cc_library(
     ],
 )
 
-grpc_cc_library(
-    name = "proto_gen_validate_upbdefs",
-    srcs = [
-        "src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c",
-        "src/core/ext/upb-generated/validate/validate.upbdefs.c",
-    ],
-    hdrs = [
-        "src/core/ext/upb-generated/gogoproto/gogo.upbdefs.h",
-        "src/core/ext/upb-generated/validate/validate.upbdefs.h",
-    ],
-    external_deps = [
-        "upb_lib",
-        "upb_lib_descriptor",
-        "upb_textformat_lib",
-    ],
-    language = "c++",
-    deps = [
-        ":google_api_upbdefs",
-        ":proto_gen_validate_upb",
-    ],
-)
-
 # Once upb code-gen issue is resolved, replace udpa_orca_upb with this.
 # grpc_upb_proto_library(
 #     name = "udpa_orca_upb",
@@ -2924,7 +2698,6 @@ grpc_cc_library(
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
     deps = [
@@ -2938,15 +2711,16 @@ grpc_cc_library(
         "src/core/ext/upb-generated/udpa/annotations/migrate.upb.c",
         "src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c",
         "src/core/ext/upb-generated/udpa/annotations/status.upb.c",
+        "src/core/ext/upb-generated/udpa/annotations/versioning.upb.c",
     ],
     hdrs = [
         "src/core/ext/upb-generated/udpa/annotations/migrate.upb.h",
         "src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h",
         "src/core/ext/upb-generated/udpa/annotations/status.upb.h",
+        "src/core/ext/upb-generated/udpa/annotations/versioning.upb.h",
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
     deps = [
@@ -2954,30 +2728,6 @@ grpc_cc_library(
     ],
 )
 
-grpc_cc_library(
-    name = "udpa_annotations_upbdefs",
-    srcs = [
-        "src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c",
-        "src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c",
-        "src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c",
-    ],
-    hdrs = [
-        "src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.h",
-        "src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.h",
-        "src/core/ext/upb-generated/udpa/annotations/status.upbdefs.h",
-    ],
-    external_deps = [
-        "upb_lib",
-        "upb_lib_descriptor",
-        "upb_textformat_lib",
-    ],
-    language = "c++",
-    deps = [
-        ":google_api_upbdefs",
-        ":udpa_annotations_upb",
-    ],
-)
-
 # Once upb code-gen issue is resolved, replace grpc_health_upb with this.
 # grpc_upb_proto_library(
 #     name = "grpc_health_upb",
@@ -2994,7 +2744,6 @@ grpc_cc_library(
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
 )
@@ -3006,6 +2755,7 @@ grpc_cc_library(
         "src/core/ext/upb-generated/google/api/annotations.upb.c",
         "src/core/ext/upb-generated/google/api/http.upb.c",
         "src/core/ext/upb-generated/google/protobuf/any.upb.c",
+        "src/core/ext/upb-generated/google/protobuf/descriptor.upb.c",
         "src/core/ext/upb-generated/google/protobuf/duration.upb.c",
         "src/core/ext/upb-generated/google/protobuf/empty.upb.c",
         "src/core/ext/upb-generated/google/protobuf/struct.upb.c",
@@ -3017,6 +2767,7 @@ grpc_cc_library(
         "src/core/ext/upb-generated/google/api/annotations.upb.h",
         "src/core/ext/upb-generated/google/api/http.upb.h",
         "src/core/ext/upb-generated/google/protobuf/any.upb.h",
+        "src/core/ext/upb-generated/google/protobuf/descriptor.upb.h",
         "src/core/ext/upb-generated/google/protobuf/duration.upb.h",
         "src/core/ext/upb-generated/google/protobuf/empty.upb.h",
         "src/core/ext/upb-generated/google/protobuf/struct.upb.h",
@@ -3026,48 +2777,10 @@ grpc_cc_library(
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
 )
 
-grpc_cc_library(
-    name = "google_api_upbdefs",
-    srcs = [
-        "src/core/ext/upb-generated/google/api/annotations.upbdefs.c",
-        "src/core/ext/upb-generated/google/api/http.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/any.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c",
-        "src/core/ext/upb-generated/google/rpc/status.upbdefs.c",
-    ],
-    hdrs = [
-        "src/core/ext/upb-generated/google/api/annotations.upbdefs.h",
-        "src/core/ext/upb-generated/google/api/http.upbdefs.h",
-        "src/core/ext/upb-generated/google/protobuf/any.upbdefs.h",
-        "src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.h",
-        "src/core/ext/upb-generated/google/protobuf/duration.upbdefs.h",
-        "src/core/ext/upb-generated/google/protobuf/empty.upbdefs.h",
-        "src/core/ext/upb-generated/google/protobuf/struct.upbdefs.h",
-        "src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.h",
-        "src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.h",
-        "src/core/ext/upb-generated/google/rpc/status.upbdefs.h",
-    ],
-    external_deps = [
-        "upb_lib",
-        "upb_lib_descriptor",
-        "upb_textformat_lib",
-    ],
-    language = "c++",
-    deps = [
-        ":google_api_upb",
-    ],
-)
-
 # Once upb code-gen issue is resolved, replace grpc_lb_upb with this.
 # grpc_upb_proto_library(
 #     name = "grpc_lb_upb",
@@ -3084,7 +2797,6 @@ grpc_cc_library(
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
     deps = [
@@ -3112,7 +2824,6 @@ grpc_cc_library(
     ],
     external_deps = [
         "upb_lib",
-        "upb_lib_descriptor",
     ],
     language = "c++",
 )

+ 105 - 243
BUILD.gn

@@ -170,9 +170,11 @@ config("grpc_config") {
     ]
     deps = [
         ":absl/time:time",
+        ":absl/synchronization:synchronization",
         ":absl/strings:strings",
         ":absl/strings:str_format",
         ":absl/memory:memory",
+        ":absl/base:base",
     ]
     
     public_configs = [
@@ -399,254 +401,126 @@ config("grpc_config") {
         "src/core/ext/transport/inproc/inproc_transport.h",
         "src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c",
         "src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h",
-        "src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.h",
         "src/core/ext/upb-generated/envoy/annotations/resource.upb.c",
         "src/core/ext/upb-generated/envoy/annotations/resource.upb.h",
-        "src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cds.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cds.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/eds.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/eds.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/lds.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/lds.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/rds.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/rds.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/api/v2/srds.upb.c",
-        "src/core/ext/upb-generated/envoy/api/v2/srds.upb.h",
-        "src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c",
-        "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h",
-        "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c",
-        "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h",
-        "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c",
-        "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h",
-        "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c",
-        "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h",
-        "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c",
-        "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h",
-        "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c",
-        "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h",
-        "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/http.upb.c",
-        "src/core/ext/upb-generated/envoy/type/http.upb.h",
-        "src/core/ext/upb-generated/envoy/type/http.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/http.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c",
-        "src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h",
-        "src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/matcher/string.upb.c",
-        "src/core/ext/upb-generated/envoy/type/matcher/string.upb.h",
-        "src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c",
-        "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h",
-        "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/percent.upb.c",
-        "src/core/ext/upb-generated/envoy/type/percent.upb.h",
-        "src/core/ext/upb-generated/envoy/type/percent.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/percent.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/range.upb.c",
-        "src/core/ext/upb-generated/envoy/type/range.upb.h",
-        "src/core/ext/upb-generated/envoy/type/range.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/range.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/semantic_version.upb.c",
-        "src/core/ext/upb-generated/envoy/type/semantic_version.upb.h",
-        "src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.h",
-        "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c",
-        "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h",
-        "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c",
-        "src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.h",
+        "src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c",
+        "src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c",
+        "src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h",
+        "src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c",
+        "src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c",
+        "src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c",
+        "src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h",
+        "src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c",
+        "src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h",
+        "src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c",
+        "src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h",
+        "src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c",
+        "src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h",
+        "src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c",
+        "src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h",
+        "src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c",
+        "src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c",
+        "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h",
+        "src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c",
+        "src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h",
+        "src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c",
+        "src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h",
+        "src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c",
+        "src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h",
+        "src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c",
+        "src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h",
+        "src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c",
+        "src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h",
+        "src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c",
+        "src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h",
+        "src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c",
+        "src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h",
+        "src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c",
+        "src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h",
+        "src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c",
+        "src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h",
+        "src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c",
+        "src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h",
+        "src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c",
+        "src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h",
+        "src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c",
+        "src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h",
+        "src/core/ext/upb-generated/envoy/type/v3/http.upb.c",
+        "src/core/ext/upb-generated/envoy/type/v3/http.upb.h",
+        "src/core/ext/upb-generated/envoy/type/v3/percent.upb.c",
+        "src/core/ext/upb-generated/envoy/type/v3/percent.upb.h",
+        "src/core/ext/upb-generated/envoy/type/v3/range.upb.c",
+        "src/core/ext/upb-generated/envoy/type/v3/range.upb.h",
+        "src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c",
+        "src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h",
         "src/core/ext/upb-generated/gogoproto/gogo.upb.c",
         "src/core/ext/upb-generated/gogoproto/gogo.upb.h",
-        "src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c",
-        "src/core/ext/upb-generated/gogoproto/gogo.upbdefs.h",
         "src/core/ext/upb-generated/google/api/annotations.upb.c",
         "src/core/ext/upb-generated/google/api/annotations.upb.h",
-        "src/core/ext/upb-generated/google/api/annotations.upbdefs.c",
-        "src/core/ext/upb-generated/google/api/annotations.upbdefs.h",
         "src/core/ext/upb-generated/google/api/http.upb.c",
         "src/core/ext/upb-generated/google/api/http.upb.h",
-        "src/core/ext/upb-generated/google/api/http.upbdefs.c",
-        "src/core/ext/upb-generated/google/api/http.upbdefs.h",
         "src/core/ext/upb-generated/google/protobuf/any.upb.c",
         "src/core/ext/upb-generated/google/protobuf/any.upb.h",
-        "src/core/ext/upb-generated/google/protobuf/any.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/any.upbdefs.h",
-        "src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.h",
+        "src/core/ext/upb-generated/google/protobuf/descriptor.upb.c",
+        "src/core/ext/upb-generated/google/protobuf/descriptor.upb.h",
         "src/core/ext/upb-generated/google/protobuf/duration.upb.c",
         "src/core/ext/upb-generated/google/protobuf/duration.upb.h",
-        "src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/duration.upbdefs.h",
         "src/core/ext/upb-generated/google/protobuf/empty.upb.c",
         "src/core/ext/upb-generated/google/protobuf/empty.upb.h",
-        "src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/empty.upbdefs.h",
         "src/core/ext/upb-generated/google/protobuf/struct.upb.c",
         "src/core/ext/upb-generated/google/protobuf/struct.upb.h",
-        "src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/struct.upbdefs.h",
         "src/core/ext/upb-generated/google/protobuf/timestamp.upb.c",
         "src/core/ext/upb-generated/google/protobuf/timestamp.upb.h",
-        "src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.h",
         "src/core/ext/upb-generated/google/protobuf/wrappers.upb.c",
         "src/core/ext/upb-generated/google/protobuf/wrappers.upb.h",
-        "src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c",
-        "src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.h",
         "src/core/ext/upb-generated/google/rpc/status.upb.c",
         "src/core/ext/upb-generated/google/rpc/status.upb.h",
-        "src/core/ext/upb-generated/google/rpc/status.upbdefs.c",
-        "src/core/ext/upb-generated/google/rpc/status.upbdefs.h",
         "src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c",
         "src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h",
         "src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c",
@@ -659,22 +533,16 @@ config("grpc_config") {
         "src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h",
         "src/core/ext/upb-generated/udpa/annotations/migrate.upb.c",
         "src/core/ext/upb-generated/udpa/annotations/migrate.upb.h",
-        "src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c",
-        "src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.h",
         "src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c",
         "src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h",
-        "src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c",
-        "src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.h",
         "src/core/ext/upb-generated/udpa/annotations/status.upb.c",
         "src/core/ext/upb-generated/udpa/annotations/status.upb.h",
-        "src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c",
-        "src/core/ext/upb-generated/udpa/annotations/status.upbdefs.h",
+        "src/core/ext/upb-generated/udpa/annotations/versioning.upb.c",
+        "src/core/ext/upb-generated/udpa/annotations/versioning.upb.h",
         "src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c",
         "src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h",
         "src/core/ext/upb-generated/validate/validate.upb.c",
         "src/core/ext/upb-generated/validate/validate.upb.h",
-        "src/core/ext/upb-generated/validate/validate.upbdefs.c",
-        "src/core/ext/upb-generated/validate/validate.upbdefs.h",
         "src/core/lib/avl/avl.cc",
         "src/core/lib/avl/avl.h",
         "src/core/lib/backoff/backoff.cc",
@@ -978,8 +846,6 @@ config("grpc_config") {
         "src/core/lib/security/transport/security_handshaker.cc",
         "src/core/lib/security/transport/security_handshaker.h",
         "src/core/lib/security/transport/server_auth_filter.cc",
-        "src/core/lib/security/transport/target_authority_table.cc",
-        "src/core/lib/security/transport/target_authority_table.h",
         "src/core/lib/security/transport/tsi_error.cc",
         "src/core/lib/security/transport/tsi_error.h",
         "src/core/lib/security/util/json_util.cc",
@@ -990,13 +856,11 @@ config("grpc_config") {
         "src/core/lib/slice/percent_encoding.h",
         "src/core/lib/slice/slice.cc",
         "src/core/lib/slice/slice_buffer.cc",
-        "src/core/lib/slice/slice_hash_table.h",
         "src/core/lib/slice/slice_intern.cc",
         "src/core/lib/slice/slice_internal.h",
         "src/core/lib/slice/slice_string_helpers.cc",
         "src/core/lib/slice/slice_string_helpers.h",
         "src/core/lib/slice/slice_utils.h",
-        "src/core/lib/slice/slice_weak_hash_table.h",
         "src/core/lib/surface/api_trace.cc",
         "src/core/lib/surface/api_trace.h",
         "src/core/lib/surface/byte_buffer.cc",
@@ -1030,6 +894,8 @@ config("grpc_config") {
         "src/core/lib/surface/validate_metadata.cc",
         "src/core/lib/surface/validate_metadata.h",
         "src/core/lib/surface/version.cc",
+        "src/core/lib/transport/authority_override.cc",
+        "src/core/lib/transport/authority_override.h",
         "src/core/lib/transport/bdp_estimator.cc",
         "src/core/lib/transport/bdp_estimator.h",
         "src/core/lib/transport/byte_stream.cc",
@@ -1123,6 +989,7 @@ config("grpc_config") {
         ":upb",
         ":absl/types:optional",
         ":absl/strings:strings",
+        ":absl/status:status",
         ":absl/container:inlined_vector",
         "//third_party/cares",
         ":address_sorting",
@@ -1226,12 +1093,10 @@ config("grpc_config") {
         "include/grpcpp/completion_queue.h",
         "include/grpcpp/completion_queue_impl.h",
         "include/grpcpp/create_channel.h",
-        "include/grpcpp/create_channel_impl.h",
         "include/grpcpp/create_channel_posix.h",
         "include/grpcpp/ext/health_check_service_server_builder_option.h",
         "include/grpcpp/generic/async_generic_service.h",
         "include/grpcpp/generic/generic_stub.h",
-        "include/grpcpp/generic/generic_stub_impl.h",
         "include/grpcpp/grpcpp.h",
         "include/grpcpp/health_check_service_interface.h",
         "include/grpcpp/impl/call.h",
@@ -1310,11 +1175,8 @@ config("grpc_config") {
         "include/grpcpp/resource_quota.h",
         "include/grpcpp/security/auth_context.h",
         "include/grpcpp/security/auth_metadata_processor.h",
-        "include/grpcpp/security/auth_metadata_processor_impl.h",
         "include/grpcpp/security/credentials.h",
-        "include/grpcpp/security/credentials_impl.h",
         "include/grpcpp/security/server_credentials.h",
-        "include/grpcpp/security/server_credentials_impl.h",
         "include/grpcpp/security/tls_credentials_options.h",
         "include/grpcpp/server.h",
         "include/grpcpp/server_builder.h",

+ 276 - 352
CMakeLists.txt

@@ -25,12 +25,12 @@
 cmake_minimum_required(VERSION 3.5.1)
 
 set(PACKAGE_NAME          "grpc")
-set(PACKAGE_VERSION       "1.31.0-dev")
+set(PACKAGE_VERSION       "1.32.0-dev")
 set(gRPC_CORE_VERSION     "11.0.0")
 set(gRPC_CORE_SOVERSION   "11")
-set(gRPC_CPP_VERSION      "1.31.0-dev")
+set(gRPC_CPP_VERSION      "1.32.0-dev")
 set(gRPC_CPP_SOVERSION    "1")
-set(gRPC_CSHARP_VERSION   "2.31.0-dev")
+set(gRPC_CSHARP_VERSION   "2.32.0-dev")
 set(gRPC_CSHARP_SOVERSION "2")
 set(PACKAGE_STRING        "${PACKAGE_NAME} ${PACKAGE_VERSION}")
 set(PACKAGE_TARNAME       "${PACKAGE_NAME}-${PACKAGE_VERSION}")
@@ -111,23 +111,35 @@ set(gRPC_ABSL_USED_TARGETS
   absl_civil_time
   absl_compressed_tuple
   absl_config
+  absl_cord
   absl_core_headers
+  absl_debugging_internal
+  absl_demangle_internal
   absl_dynamic_annotations
   absl_endian
   absl_errno_saver
+  absl_fixed_array
+  absl_function_ref
+  absl_graphcycles_internal
   absl_inlined_vector
   absl_inlined_vector_internal
   absl_int128
+  absl_kernel_timeout_internal
   absl_log_severity
+  absl_malloc_internal
   absl_memory
   absl_optional
   absl_raw_logging_internal
   absl_span
   absl_spinlock_wait
+  absl_stacktrace
+  absl_status
   absl_str_format
   absl_str_format_internal
   absl_strings
   absl_strings_internal
+  absl_symbolize
+  absl_synchronization
   absl_throw_delegate
   absl_time
   absl_time_zone
@@ -424,6 +436,51 @@ protobuf_generate_grpc_cpp(
 protobuf_generate_grpc_cpp(
   src/proto/grpc/testing/xds/orca_load_report_for_test.proto
 )
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/address.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/ads.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/base.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/cluster.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/config_source.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/discovery.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/endpoint.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/http_connection_manager.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/listener.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/load_report.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/lrs.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/percent.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/range.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/regex.proto
+)
+protobuf_generate_grpc_cpp(
+  src/proto/grpc/testing/xds/v3/route.proto
+)
 protobuf_generate_grpc_cpp(
   test/core/tsi/alts/fake_handshaker/handshaker.proto
 )
@@ -809,12 +866,13 @@ if(gRPC_BUILD_TESTS)
   add_dependencies(buildtests_cxx settings_timeout_test)
   add_dependencies(buildtests_cxx shutdown_test)
   add_dependencies(buildtests_cxx simple_request_bad_client_test)
-  add_dependencies(buildtests_cxx slice_hash_table_test)
-  add_dependencies(buildtests_cxx slice_weak_hash_table_test)
   add_dependencies(buildtests_cxx static_metadata_test)
   add_dependencies(buildtests_cxx stats_test)
   add_dependencies(buildtests_cxx status_metadata_test)
   add_dependencies(buildtests_cxx status_util_test)
+  if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+    add_dependencies(buildtests_cxx stranded_event_test)
+  endif()
   if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
     add_dependencies(buildtests_cxx streaming_throughput_test)
   endif()
@@ -1256,9 +1314,11 @@ target_include_directories(gpr
 target_link_libraries(gpr
   ${_gRPC_ALLTARGETS_LIBRARIES}
   absl::time
+  absl::synchronization
   absl::strings
   absl::str_format
   absl::memory
+  absl::base
 )
 if(_gRPC_PLATFORM_ANDROID)
   target_link_libraries(gpr
@@ -1441,144 +1501,77 @@ add_library(grpc
   src/core/ext/transport/inproc/inproc_plugin.cc
   src/core/ext/transport/inproc/inproc_transport.cc
   src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c
-  src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c
   src/core/ext/upb-generated/envoy/annotations/resource.upb.c
-  src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/cds.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/eds.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/lds.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/listener.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/rds.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/route.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/srds.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c
-  src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c
-  src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c
-  src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c
-  src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c
-  src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c
-  src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c
-  src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c
-  src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c
-  src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c
-  src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c
-  src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c
-  src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/http.upb.c
-  src/core/ext/upb-generated/envoy/type/http.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c
-  src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/matcher/string.upb.c
-  src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c
-  src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/percent.upb.c
-  src/core/ext/upb-generated/envoy/type/percent.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/range.upb.c
-  src/core/ext/upb-generated/envoy/type/range.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/semantic_version.upb.c
-  src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c
-  src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c
+  src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c
+  src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c
+  src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c
+  src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c
+  src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c
+  src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c
+  src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c
+  src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c
+  src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c
+  src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c
+  src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c
+  src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c
+  src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c
+  src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c
+  src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c
+  src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c
+  src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c
+  src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c
+  src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c
+  src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c
+  src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c
+  src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c
+  src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c
+  src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c
+  src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c
+  src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c
+  src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c
+  src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c
+  src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c
+  src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c
+  src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c
+  src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c
+  src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c
+  src/core/ext/upb-generated/envoy/type/v3/http.upb.c
+  src/core/ext/upb-generated/envoy/type/v3/percent.upb.c
+  src/core/ext/upb-generated/envoy/type/v3/range.upb.c
+  src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c
   src/core/ext/upb-generated/gogoproto/gogo.upb.c
-  src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c
   src/core/ext/upb-generated/google/api/annotations.upb.c
-  src/core/ext/upb-generated/google/api/annotations.upbdefs.c
   src/core/ext/upb-generated/google/api/http.upb.c
-  src/core/ext/upb-generated/google/api/http.upbdefs.c
   src/core/ext/upb-generated/google/protobuf/any.upb.c
-  src/core/ext/upb-generated/google/protobuf/any.upbdefs.c
-  src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c
+  src/core/ext/upb-generated/google/protobuf/descriptor.upb.c
   src/core/ext/upb-generated/google/protobuf/duration.upb.c
-  src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c
   src/core/ext/upb-generated/google/protobuf/empty.upb.c
-  src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c
   src/core/ext/upb-generated/google/protobuf/struct.upb.c
-  src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c
   src/core/ext/upb-generated/google/protobuf/timestamp.upb.c
-  src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c
   src/core/ext/upb-generated/google/protobuf/wrappers.upb.c
-  src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c
   src/core/ext/upb-generated/google/rpc/status.upb.c
-  src/core/ext/upb-generated/google/rpc/status.upbdefs.c
   src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c
   src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c
   src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c
   src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c
   src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c
   src/core/ext/upb-generated/udpa/annotations/migrate.upb.c
-  src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c
   src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c
-  src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c
   src/core/ext/upb-generated/udpa/annotations/status.upb.c
-  src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c
+  src/core/ext/upb-generated/udpa/annotations/versioning.upb.c
   src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c
   src/core/ext/upb-generated/validate/validate.upb.c
-  src/core/ext/upb-generated/validate/validate.upbdefs.c
   src/core/lib/avl/avl.cc
   src/core/lib/backoff/backoff.cc
   src/core/lib/channel/channel_args.cc
@@ -1741,7 +1734,6 @@ add_library(grpc
   src/core/lib/security/transport/secure_endpoint.cc
   src/core/lib/security/transport/security_handshaker.cc
   src/core/lib/security/transport/server_auth_filter.cc
-  src/core/lib/security/transport/target_authority_table.cc
   src/core/lib/security/transport/tsi_error.cc
   src/core/lib/security/util/json_util.cc
   src/core/lib/slice/b64.cc
@@ -1770,6 +1762,7 @@ add_library(grpc
   src/core/lib/surface/server.cc
   src/core/lib/surface/validate_metadata.cc
   src/core/lib/surface/version.cc
+  src/core/lib/transport/authority_override.cc
   src/core/lib/transport/bdp_estimator.cc
   src/core/lib/transport/byte_stream.cc
   src/core/lib/transport/connectivity_state.cc
@@ -1856,6 +1849,7 @@ target_link_libraries(grpc
   upb
   absl::optional
   absl::strings
+  absl::status
   absl::inlined_vector
 )
 if(_gRPC_PLATFORM_IOS OR _gRPC_PLATFORM_MAC)
@@ -2183,141 +2177,74 @@ add_library(grpc_unsecure
   src/core/ext/transport/inproc/inproc_plugin.cc
   src/core/ext/transport/inproc/inproc_transport.cc
   src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c
-  src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c
   src/core/ext/upb-generated/envoy/annotations/resource.upb.c
-  src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/cds.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/eds.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/lds.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/listener.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/rds.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/route.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c
-  src/core/ext/upb-generated/envoy/api/v2/srds.upb.c
-  src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c
-  src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c
-  src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c
-  src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c
-  src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c
-  src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c
-  src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c
-  src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c
-  src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c
-  src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c
-  src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c
-  src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c
-  src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/http.upb.c
-  src/core/ext/upb-generated/envoy/type/http.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c
-  src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/matcher/string.upb.c
-  src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c
-  src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/percent.upb.c
-  src/core/ext/upb-generated/envoy/type/percent.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/range.upb.c
-  src/core/ext/upb-generated/envoy/type/range.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/semantic_version.upb.c
-  src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c
-  src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c
-  src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c
+  src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c
+  src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c
+  src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c
+  src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c
+  src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c
+  src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c
+  src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c
+  src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c
+  src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c
+  src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c
+  src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c
+  src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c
+  src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c
+  src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c
+  src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c
+  src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c
+  src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c
+  src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c
+  src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c
+  src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c
+  src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c
+  src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c
+  src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c
+  src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c
+  src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c
+  src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c
+  src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c
+  src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c
+  src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c
+  src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c
+  src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c
+  src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c
+  src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c
+  src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c
+  src/core/ext/upb-generated/envoy/type/v3/http.upb.c
+  src/core/ext/upb-generated/envoy/type/v3/percent.upb.c
+  src/core/ext/upb-generated/envoy/type/v3/range.upb.c
+  src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c
   src/core/ext/upb-generated/gogoproto/gogo.upb.c
-  src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c
   src/core/ext/upb-generated/google/api/annotations.upb.c
-  src/core/ext/upb-generated/google/api/annotations.upbdefs.c
   src/core/ext/upb-generated/google/api/http.upb.c
-  src/core/ext/upb-generated/google/api/http.upbdefs.c
   src/core/ext/upb-generated/google/protobuf/any.upb.c
-  src/core/ext/upb-generated/google/protobuf/any.upbdefs.c
-  src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c
+  src/core/ext/upb-generated/google/protobuf/descriptor.upb.c
   src/core/ext/upb-generated/google/protobuf/duration.upb.c
-  src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c
   src/core/ext/upb-generated/google/protobuf/empty.upb.c
-  src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c
   src/core/ext/upb-generated/google/protobuf/struct.upb.c
-  src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c
   src/core/ext/upb-generated/google/protobuf/timestamp.upb.c
-  src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c
   src/core/ext/upb-generated/google/protobuf/wrappers.upb.c
-  src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c
   src/core/ext/upb-generated/google/rpc/status.upb.c
-  src/core/ext/upb-generated/google/rpc/status.upbdefs.c
   src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c
   src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c
   src/core/ext/upb-generated/udpa/annotations/migrate.upb.c
-  src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c
   src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c
-  src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c
   src/core/ext/upb-generated/udpa/annotations/status.upb.c
-  src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c
+  src/core/ext/upb-generated/udpa/annotations/versioning.upb.c
   src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c
   src/core/ext/upb-generated/validate/validate.upb.c
-  src/core/ext/upb-generated/validate/validate.upbdefs.c
   src/core/lib/avl/avl.cc
   src/core/lib/backoff/backoff.cc
   src/core/lib/channel/channel_args.cc
@@ -2466,6 +2393,7 @@ add_library(grpc_unsecure
   src/core/lib/surface/server.cc
   src/core/lib/surface/validate_metadata.cc
   src/core/lib/surface/version.cc
+  src/core/lib/transport/authority_override.cc
   src/core/lib/transport/bdp_estimator.cc
   src/core/lib/transport/byte_stream.cc
   src/core/lib/transport/connectivity_state.cc
@@ -2524,6 +2452,7 @@ target_link_libraries(grpc_unsecure
   upb
   absl::optional
   absl::strings
+  absl::status
   absl::inlined_vector
 )
 if(_gRPC_PLATFORM_IOS OR _gRPC_PLATFORM_MAC)
@@ -2807,12 +2736,10 @@ foreach(_hdr
   include/grpcpp/completion_queue.h
   include/grpcpp/completion_queue_impl.h
   include/grpcpp/create_channel.h
-  include/grpcpp/create_channel_impl.h
   include/grpcpp/create_channel_posix.h
   include/grpcpp/ext/health_check_service_server_builder_option.h
   include/grpcpp/generic/async_generic_service.h
   include/grpcpp/generic/generic_stub.h
-  include/grpcpp/generic/generic_stub_impl.h
   include/grpcpp/grpcpp.h
   include/grpcpp/health_check_service_interface.h
   include/grpcpp/impl/call.h
@@ -2891,11 +2818,8 @@ foreach(_hdr
   include/grpcpp/resource_quota.h
   include/grpcpp/security/auth_context.h
   include/grpcpp/security/auth_metadata_processor.h
-  include/grpcpp/security/auth_metadata_processor_impl.h
   include/grpcpp/security/credentials.h
-  include/grpcpp/security/credentials_impl.h
   include/grpcpp/security/server_credentials.h
-  include/grpcpp/security/server_credentials_impl.h
   include/grpcpp/security/tls_credentials_options.h
   include/grpcpp/server.h
   include/grpcpp/server_builder.h
@@ -3065,7 +2989,6 @@ target_link_libraries(grpc++_error_details
 foreach(_hdr
   include/grpc++/support/error_details.h
   include/grpcpp/support/error_details.h
-  include/grpcpp/support/error_details_impl.h
 )
   string(REPLACE "include/" "" _path ${_hdr})
   get_filename_component(_path ${_path} PATH)
@@ -3139,7 +3062,6 @@ target_link_libraries(grpc++_reflection
 foreach(_hdr
   include/grpc++/ext/proto_server_reflection_plugin.h
   include/grpcpp/ext/proto_server_reflection_plugin.h
-  include/grpcpp/ext/proto_server_reflection_plugin_impl.h
 )
   string(REPLACE "include/" "" _path ${_hdr})
   get_filename_component(_path ${_path} PATH)
@@ -3504,12 +3426,10 @@ foreach(_hdr
   include/grpcpp/completion_queue.h
   include/grpcpp/completion_queue_impl.h
   include/grpcpp/create_channel.h
-  include/grpcpp/create_channel_impl.h
   include/grpcpp/create_channel_posix.h
   include/grpcpp/ext/health_check_service_server_builder_option.h
   include/grpcpp/generic/async_generic_service.h
   include/grpcpp/generic/generic_stub.h
-  include/grpcpp/generic/generic_stub_impl.h
   include/grpcpp/grpcpp.h
   include/grpcpp/health_check_service_interface.h
   include/grpcpp/impl/call.h
@@ -3588,11 +3508,8 @@ foreach(_hdr
   include/grpcpp/resource_quota.h
   include/grpcpp/security/auth_context.h
   include/grpcpp/security/auth_metadata_processor.h
-  include/grpcpp/security/auth_metadata_processor_impl.h
   include/grpcpp/security/credentials.h
-  include/grpcpp/security/credentials_impl.h
   include/grpcpp/security/server_credentials.h
-  include/grpcpp/security/server_credentials_impl.h
   include/grpcpp/security/tls_credentials_options.h
   include/grpcpp/server.h
   include/grpcpp/server_builder.h
@@ -3793,23 +3710,6 @@ add_library(upb
   third_party/upb/upb/port.c
   third_party/upb/upb/table.c
   third_party/upb/upb/upb.c
-  third_party/upb/upb/def.c
-  third_party/upb/upb/reflection.c
-  third_party/upb/upb/text_encode.c
-  src/core/ext/upb-generated/google/protobuf/any.upb.c
-  src/core/ext/upb-generated/google/protobuf/any.upbdefs.c
-  src/core/ext/upb-generated/google/protobuf/descriptor.upb.c
-  src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c
-  src/core/ext/upb-generated/google/protobuf/duration.upb.c
-  src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c
-  src/core/ext/upb-generated/google/protobuf/empty.upb.c
-  src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c
-  src/core/ext/upb-generated/google/protobuf/struct.upb.c
-  src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c
-  src/core/ext/upb-generated/google/protobuf/timestamp.upb.c
-  src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c
-  src/core/ext/upb-generated/google/protobuf/wrappers.upb.c
-  src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c
 )
 
 set_target_properties(upb PROPERTIES
@@ -13912,84 +13812,6 @@ target_link_libraries(simple_request_bad_client_test
 )
 
 
-endif()
-if(gRPC_BUILD_TESTS)
-
-add_executable(slice_hash_table_test
-  test/core/slice/slice_hash_table_test.cc
-  third_party/googletest/googletest/src/gtest-all.cc
-  third_party/googletest/googlemock/src/gmock-all.cc
-)
-
-target_include_directories(slice_hash_table_test
-  PRIVATE
-    ${CMAKE_CURRENT_SOURCE_DIR}
-    ${CMAKE_CURRENT_SOURCE_DIR}/include
-    ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
-    ${_gRPC_RE2_INCLUDE_DIR}
-    ${_gRPC_SSL_INCLUDE_DIR}
-    ${_gRPC_UPB_GENERATED_DIR}
-    ${_gRPC_UPB_GRPC_GENERATED_DIR}
-    ${_gRPC_UPB_INCLUDE_DIR}
-    ${_gRPC_ZLIB_INCLUDE_DIR}
-    third_party/googletest/googletest/include
-    third_party/googletest/googletest
-    third_party/googletest/googlemock/include
-    third_party/googletest/googlemock
-    ${_gRPC_PROTO_GENS_DIR}
-)
-
-target_link_libraries(slice_hash_table_test
-  ${_gRPC_PROTOBUF_LIBRARIES}
-  ${_gRPC_ALLTARGETS_LIBRARIES}
-  grpc_test_util
-  grpc
-  gpr
-  address_sorting
-  upb
-  ${_gRPC_GFLAGS_LIBRARIES}
-)
-
-
-endif()
-if(gRPC_BUILD_TESTS)
-
-add_executable(slice_weak_hash_table_test
-  test/core/slice/slice_weak_hash_table_test.cc
-  third_party/googletest/googletest/src/gtest-all.cc
-  third_party/googletest/googlemock/src/gmock-all.cc
-)
-
-target_include_directories(slice_weak_hash_table_test
-  PRIVATE
-    ${CMAKE_CURRENT_SOURCE_DIR}
-    ${CMAKE_CURRENT_SOURCE_DIR}/include
-    ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
-    ${_gRPC_RE2_INCLUDE_DIR}
-    ${_gRPC_SSL_INCLUDE_DIR}
-    ${_gRPC_UPB_GENERATED_DIR}
-    ${_gRPC_UPB_GRPC_GENERATED_DIR}
-    ${_gRPC_UPB_INCLUDE_DIR}
-    ${_gRPC_ZLIB_INCLUDE_DIR}
-    third_party/googletest/googletest/include
-    third_party/googletest/googletest
-    third_party/googletest/googlemock/include
-    third_party/googletest/googlemock
-    ${_gRPC_PROTO_GENS_DIR}
-)
-
-target_link_libraries(slice_weak_hash_table_test
-  ${_gRPC_PROTOBUF_LIBRARIES}
-  ${_gRPC_ALLTARGETS_LIBRARIES}
-  grpc_test_util
-  grpc
-  gpr
-  address_sorting
-  upb
-  ${_gRPC_GFLAGS_LIBRARIES}
-)
-
-
 endif()
 if(gRPC_BUILD_TESTS)
 
@@ -14146,6 +13968,48 @@ target_link_libraries(status_util_test
 )
 
 
+endif()
+if(gRPC_BUILD_TESTS)
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+
+  add_executable(stranded_event_test
+    test/core/end2end/cq_verifier.cc
+    test/core/iomgr/stranded_event_test.cc
+    third_party/googletest/googletest/src/gtest-all.cc
+    third_party/googletest/googlemock/src/gmock-all.cc
+  )
+
+  target_include_directories(stranded_event_test
+    PRIVATE
+      ${CMAKE_CURRENT_SOURCE_DIR}
+      ${CMAKE_CURRENT_SOURCE_DIR}/include
+      ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
+      ${_gRPC_RE2_INCLUDE_DIR}
+      ${_gRPC_SSL_INCLUDE_DIR}
+      ${_gRPC_UPB_GENERATED_DIR}
+      ${_gRPC_UPB_GRPC_GENERATED_DIR}
+      ${_gRPC_UPB_INCLUDE_DIR}
+      ${_gRPC_ZLIB_INCLUDE_DIR}
+      third_party/googletest/googletest/include
+      third_party/googletest/googletest
+      third_party/googletest/googlemock/include
+      third_party/googletest/googlemock
+      ${_gRPC_PROTO_GENS_DIR}
+  )
+
+  target_link_libraries(stranded_event_test
+    ${_gRPC_PROTOBUF_LIBRARIES}
+    ${_gRPC_ALLTARGETS_LIBRARIES}
+    grpc_test_util
+    grpc
+    gpr
+    address_sorting
+    upb
+    ${_gRPC_GFLAGS_LIBRARIES}
+  )
+
+
+endif()
 endif()
 if(gRPC_BUILD_TESTS)
 if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
@@ -14908,6 +14772,66 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
     ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lrs_for_test.grpc.pb.cc
     ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lrs_for_test.pb.h
     ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/lrs_for_test.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/address.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/address.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/address.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/address.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/ads.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/ads.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/ads.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/ads.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/base.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/base.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/base.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/base.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/cluster.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/cluster.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/cluster.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/cluster.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/config_source.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/config_source.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/config_source.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/config_source.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/discovery.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/discovery.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/discovery.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/discovery.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/endpoint.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/endpoint.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/endpoint.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/endpoint.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/http_connection_manager.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/http_connection_manager.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/http_connection_manager.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/http_connection_manager.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/listener.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/listener.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/listener.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/listener.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/load_report.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/load_report.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/load_report.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/load_report.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/lrs.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/lrs.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/lrs.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/lrs.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/range.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/range.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/range.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/range.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/regex.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/regex.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/regex.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/regex.grpc.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/route.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/route.grpc.pb.cc
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/route.pb.h
+    ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/route.grpc.pb.h
     test/cpp/end2end/test_service_impl.cc
     test/cpp/end2end/xds_end2end_test.cc
     third_party/googletest/googletest/src/gtest-all.cc
@@ -15645,7 +15569,7 @@ generate_pkgconfig(
   "gRPC platform support library"
   "${gRPC_CORE_VERSION}"
   ""
-  "-lgpr -labsl_str_format_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations"
+  "-lgpr -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations"
   ""
   "gpr.pc")
 
@@ -15655,7 +15579,7 @@ generate_pkgconfig(
   "high performance general RPC framework"
   "${gRPC_CORE_VERSION}"
   "gpr openssl"
-  "-lgrpc -laddress_sorting -lre2 -lupb -lcares -lz -labsl_bad_optional_access -labsl_str_format_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations"
+  "-lgrpc -laddress_sorting -lre2 -lupb -lcares -lz -labsl_status -labsl_cord -labsl_bad_optional_access -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations"
   ""
   "grpc.pc")
 
@@ -15665,7 +15589,7 @@ generate_pkgconfig(
   "high performance general RPC framework without SSL"
   "${gRPC_CORE_VERSION}"
   "gpr"
-  "-lgrpc_unsecure -labsl_bad_optional_access -labsl_str_format_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations"
+  "-lgrpc_unsecure -labsl_status -labsl_cord -labsl_bad_optional_access -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations"
   ""
   "grpc_unsecure.pc")
 
@@ -15675,7 +15599,7 @@ generate_pkgconfig(
   "C++ wrapper for gRPC"
   "${gRPC_CPP_VERSION}"
   "grpc"
-  "-lgrpc++ -labsl_bad_optional_access -labsl_str_format_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations"
+  "-lgrpc++ -labsl_status -labsl_cord -labsl_bad_optional_access -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations"
   ""
   "grpc++.pc")
 
@@ -15685,6 +15609,6 @@ generate_pkgconfig(
   "C++ wrapper for gRPC without SSL"
   "${gRPC_CPP_VERSION}"
   "grpc_unsecure"
-  "-lgrpc++_unsecure -labsl_bad_optional_access -labsl_str_format_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations"
+  "-lgrpc++_unsecure -labsl_status -labsl_cord -labsl_bad_optional_access -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations"
   ""
   "grpc++_unsecure.pc")

File diff suppressed because it is too large
+ 368 - 518
Makefile


+ 1 - 0
PYTHON-MANIFEST.in

@@ -8,6 +8,7 @@ graft third_party/abseil-cpp/absl
 graft third_party/address_sorting
 graft third_party/boringssl-with-bazel
 graft third_party/cares
+graft third_party/re2
 graft third_party/upb
 graft third_party/zlib
 include src/python/grpcio/_parallel_compile_patch.py

+ 21 - 14
Rakefile

@@ -7,6 +7,8 @@ require 'fileutils'
 
 require_relative 'build_config.rb'
 
+load 'tools/distrib/rake_compiler_docker_image.rb'
+
 # Add rubocop style checking tasks
 RuboCop::RakeTask.new(:rubocop) do |task|
   task.options = ['-c', 'src/ruby/.rubocop.yml']
@@ -81,8 +83,6 @@ end
 
 desc 'Build the Windows gRPC DLLs for Ruby'
 task 'dlls' do
-  require 'rake_compiler_dock'
-
   grpc_config = ENV['GRPC_CONFIG'] || 'opt'
   verbose = ENV['V'] || '0'
 
@@ -106,7 +106,7 @@ task 'dlls' do
     env_comp += "CXX=#{opt[:cross]}-g++ "
     env_comp += "LD=#{opt[:cross]}-gcc "
     env_comp += "LDXX=#{opt[:cross]}-g++ "
-    RakeCompilerDock.sh <<-EOT, platform: opt[:platform]
+    run_rake_compiler opt[:platform], <<-EOT
       gem update --system --no-document && \
       #{env} #{env_comp} make -j`nproc` #{out} && \
       #{opt[:cross]}-strip -x -S #{out} && \
@@ -121,6 +121,7 @@ task 'gem:native' do
   verbose = ENV['V'] || '0'
 
   grpc_config = ENV['GRPC_CONFIG'] || 'opt'
+  ruby_cc_versions = '2.7.0:2.6.0:2.5.0:2.4.0:2.3.0'
 
   if RUBY_PLATFORM =~ /darwin/
     FileUtils.touch 'grpc_c.32.ruby'
@@ -130,22 +131,28 @@ task 'gem:native' do
         "invoked on macos with ruby #{RUBY_VERSION}. The ruby macos artifact " \
         "build should be running on ruby 2.5."
     end
-    system "rake cross native gem RUBY_CC_VERSION=2.7.0:2.6.0:2.5.0:2.4.0:2.3.0 V=#{verbose} GRPC_CONFIG=#{grpc_config}"
+    system "rake cross native gem RUBY_CC_VERSION=#{ruby_cc_versions} V=#{verbose} GRPC_CONFIG=#{grpc_config}"
   else
-    require 'rake_compiler_dock'
-
     Rake::Task['dlls'].execute
-    ['x86-mingw32', 'x64-mingw32', 'x86_64-linux', 'x86-linux'].each do |plat|
-      RakeCompilerDock.sh <<-EOT, platform: plat
-        # Avoid conflicting declarations of gettimeofday: https://github.com/rake-compiler/rake-compiler-dock/issues/32
-        find /usr/local/rake-compiler -name win32.h | while read f ; do sudo sed -i 's/gettimeofday/rb_gettimeofday/' $f ; done && \
-
+    ['x86-mingw32', 'x64-mingw32'].each do |plat|
+      run_rake_compiler plat, <<-EOT
+        gem update --system --no-document && \
+        bundle && \
+        rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem pkg/#{spec.full_name}.gem \
+          RUBY_CC_VERSION=#{ruby_cc_versions} V=#{verbose} GRPC_CONFIG=#{grpc_config}
+      EOT
+    end
+    # Truncate grpc_c.*.ruby files because they're for Windows only.
+    File.truncate('grpc_c.32.ruby', 0)
+    File.truncate('grpc_c.64.ruby', 0)
+    ['x86_64-linux', 'x86-linux'].each do |plat|
+      run_rake_compiler plat,  <<-EOT
         gem update --system --no-document && \
         bundle && \
         rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem pkg/#{spec.full_name}.gem \
-          RUBY_CC_VERSION=2.7.0:2.6.0:2.5.0:2.4.0:2.3.0 \
-          V=#{verbose} \
-          GRPC_CONFIG=#{grpc_config}
+          RUBY_CC_VERSION=#{ruby_cc_versions} V=#{verbose} GRPC_CONFIG=#{grpc_config} &&
+        sudo chmod -R a+rw pkg &&
+        patchelf_gem.sh pkg/#{spec.full_name}-#{plat}.gem
       EOT
     end
   end

+ 4 - 14
bazel/grpc_deps.bzl

@@ -11,16 +11,6 @@ def grpc_deps():
         actual = "@upb//:upb",
     )
 
-    native.bind(
-        name = "upb_lib_descriptor",
-        actual = "@upb//:descriptor_upb_proto",
-    )
-
-    native.bind(
-        name = "upb_textformat_lib",
-        actual = "@upb//:textformat",
-    )
-
     native.bind(
         name = "absl",
         actual = "@com_google_absl//absl",
@@ -146,11 +136,11 @@ def grpc_deps():
             name = "boringssl",
             # Use github mirror instead of https://boringssl.googlesource.com/boringssl
             # to obtain a boringssl archive with consistent sha256
-            sha256 = "3909329105e28cfeedcd8028865c92f1081ae2524a0ad6c09eba5d91d9ae3869",
-            strip_prefix = "boringssl-3ab047a8e377083a9b38dc908fe1612d5743a021",
+            sha256 = "5bbb2bbddf5e4e5fefd02501f930436f3f45402152d7ea9f8f27916d5cf70157",
+            strip_prefix = "boringssl-e8a935e323510419e0b37638716f6df4dcbbe6f6",
             urls = [
-                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/boringssl/archive/3ab047a8e377083a9b38dc908fe1612d5743a021.tar.gz",
-                "https://github.com/google/boringssl/archive/3ab047a8e377083a9b38dc908fe1612d5743a021.tar.gz",
+                "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/boringssl/archive/e8a935e323510419e0b37638716f6df4dcbbe6f6.tar.gz",
+                "https://github.com/google/boringssl/archive/e8a935e323510419e0b37638716f6df4dcbbe6f6.tar.gz",
             ],
         )
 

+ 3 - 6
bazel/python_rules.bzl

@@ -53,7 +53,7 @@ def _generate_py_impl(context):
 
     imports = []
     if out_dir.import_path:
-        imports.append("__main__/%s" % out_dir.import_path)
+        imports.append("%s/%s/%s" % (context.workspace_name, context.label.package, out_dir.import_path))
 
     return [
         DefaultInfo(files = depset(direct = out_files)),
@@ -164,15 +164,12 @@ def _generate_pb2_grpc_src_impl(context):
         mnemonic = "ProtocInvocation",
     )
 
-    imports = []
-    if out_dir.import_path:
-        imports.append("__main__/%s" % out_dir.import_path)
-
     return [
         DefaultInfo(files = depset(direct = out_files)),
         PyInfo(
             transitive_sources = depset(),
-            imports = depset(direct = imports),
+            # Imports are already configured by the generated py impl
+            imports = depset(),
         ),
     ]
 

+ 2 - 0
bazel/test/python_test_repo/BUILD

@@ -69,6 +69,8 @@ py2and3_test(
 # Test compatibility of py_proto_library and py_grpc_library rules with
 # proto_library targets as deps when the latter use import_prefix and/or
 # strip_import_prefix arguments
+#
+# See namespaced/upper/example for more encompassing tests.
 proto_library(
     name = "helloworld_moved_proto",
     srcs = ["helloworld.proto"],

+ 3 - 0
bazel/test/python_test_repo/WORKSPACE

@@ -3,6 +3,9 @@ local_repository(
     path = "../../..",
 )
 
+# Ensure rules don't rely on __main__ naming convention.
+workspace(name = "python_test_repo")
+
 load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps")
 
 grpc_deps()

+ 165 - 0
bazel/test/python_test_repo/namespaced/upper/example/BUILD

@@ -0,0 +1,165 @@
+# gRPC Bazel BUILD file.
+#
+# Copyright 2020 The gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+load("@rules_proto//proto:defs.bzl", "proto_library")
+load(
+    "@com_github_grpc_grpc//bazel:python_rules.bzl",
+    "py2and3_test",
+    "py_grpc_library",
+    "py_proto_library",
+)
+
+_IMPORT_PREFIX = "foo/bar"
+
+_STRIP_PREFIX = "/%s" % package_name()
+
+proto_library(
+    name = "import_no_strip_proto",
+    srcs = ["namespaced_example.proto"],
+    import_prefix = _IMPORT_PREFIX,
+    strip_import_prefix = None,
+)
+
+proto_library(
+    name = "import_strip_proto",
+    srcs = ["namespaced_example.proto"],
+    import_prefix = _IMPORT_PREFIX,
+    strip_import_prefix = _STRIP_PREFIX,
+)
+
+proto_library(
+    name = "no_import_no_strip_proto",
+    srcs = ["namespaced_example.proto"],
+    import_prefix = None,
+    strip_import_prefix = None,
+)
+
+proto_library(
+    name = "no_import_strip_proto",
+    srcs = ["namespaced_example.proto"],
+    import_prefix = None,
+    strip_import_prefix = _STRIP_PREFIX,
+)
+
+py_proto_library(
+    name = "import_no_strip_py_pb2",
+    deps = ["import_no_strip_proto"],
+)
+
+py_grpc_library(
+    name = "import_no_strip_py_pb2_grpc",
+    srcs = ["import_no_strip_proto"],
+    deps = ["import_no_strip_py_pb2"],
+)
+
+py_proto_library(
+    name = "import_strip_py_pb2",
+    deps = ["import_strip_proto"],
+)
+
+py_grpc_library(
+    name = "import_strip_py_pb2_grpc",
+    srcs = ["import_strip_proto"],
+    deps = ["import_strip_py_pb2"],
+)
+
+py_proto_library(
+    name = "no_import_no_strip_py_pb2",
+    deps = ["no_import_no_strip_proto"],
+)
+
+py_grpc_library(
+    name = "no_import_no_strip_py_pb2_grpc",
+    srcs = ["no_import_no_strip_proto"],
+    deps = ["no_import_no_strip_py_pb2"],
+)
+
+py_proto_library(
+    name = "no_import_strip_py_pb2",
+    deps = ["no_import_strip_proto"],
+)
+
+py_grpc_library(
+    name = "no_import_strip_py_pb2_grpc",
+    srcs = ["no_import_strip_proto"],
+    deps = ["no_import_strip_py_pb2"],
+)
+
+#################
+# Namespace Tests
+#################
+
+# Most examples with protos have all proto packages rooted at the workspace root. i.e. google/api has
+# a directory structure:
+# - WORKSPACE
+# - /google
+#   - /api
+#     - files.proto
+#
+# But if you can't anchor the protos at the root, you have to use strip and import prefixes. This results
+# in the following directory layout for python, which needs to properly be added to the imports.
+#
+# No Import or Strip (Can't compile if there are any proto dependencies)
+# bazel-out/darwin-fastbuild/bin/namespaced/upper/example/namespaced_example_pb2.py
+#
+# No import Prefix (Can't compile if there are any proto dependencies)
+# bazel-out/darwin-fastbuild/bin/namespaced/upper/example/_virtual_imports/namespaced_example_proto/namespaced_example_pb2.py
+#
+# No strip prefix (Can't compile if there are any proto dependencies)
+# bazel-out/darwin-fastbuild/bin/namespaced/upper/example/_virtual_imports/namespaced_example_proto/upper/example/namespaced/upper/example/namespaced_example_pb2.py
+#
+# Both Import and Strip
+# bazel-out/darwin-fastbuild/bin/namespaced/upper/example/_virtual_imports/namespaced_example_proto/upper/example/namespaced_example_pb2.py
+
+py2and3_test(
+    "import_no_strip_test",
+    srcs = ["import_no_strip_test.py"],
+    main = "import_no_strip_test.py",
+    deps = [
+        ":import_no_strip_py_pb2",
+        ":import_no_strip_py_pb2_grpc",
+    ],
+)
+
+py2and3_test(
+    "import_strip_test",
+    srcs = ["import_strip_test.py"],
+    main = "import_strip_test.py",
+    deps = [
+        ":import_strip_py_pb2",
+        ":import_strip_py_pb2_grpc",
+    ],
+)
+
+py2and3_test(
+    "no_import_no_strip_test",
+    srcs = ["no_import_no_strip_test.py"],
+    main = "no_import_no_strip_test.py",
+    deps = [
+        ":no_import_no_strip_py_pb2",
+        ":no_import_no_strip_py_pb2_grpc",
+    ],
+)
+
+py2and3_test(
+    "no_import_strip_test",
+    srcs = ["no_import_strip_test.py"],
+    main = "no_import_strip_test.py",
+    deps = [
+        ":no_import_strip_py_pb2",
+        ":no_import_strip_py_pb2_grpc",
+    ],
+)

+ 35 - 0
bazel/test/python_test_repo/namespaced/upper/example/import_no_strip_test.py

@@ -0,0 +1,35 @@
+# Copyright 2020 the gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+import unittest
+
+
+class ImportTest(unittest.TestCase):
+    def test_import(self):
+        from foo.bar.namespaced.upper.example.namespaced_example_pb2 import NamespacedExample
+        namespaced_example = NamespacedExample()
+        namespaced_example.value = "hello"
+        # Dummy assert, important part is namespaced example was imported.
+        self.assertEqual(namespaced_example.value, "hello")
+
+    def test_grpc(self):
+        from foo.bar.namespaced.upper.example.namespaced_example_pb2_grpc import NamespacedServiceStub
+        # No error from import
+        self.assertEqual(1, 1)
+
+
+if __name__ == '__main__':
+    logging.basicConfig()
+    unittest.main()

+ 35 - 0
bazel/test/python_test_repo/namespaced/upper/example/import_strip_test.py

@@ -0,0 +1,35 @@
+# Copyright 2020 the gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+import unittest
+
+
+class ImportTest(unittest.TestCase):
+    def test_import(self):
+        from foo.bar.namespaced_example_pb2 import NamespacedExample
+        namespaced_example = NamespacedExample()
+        namespaced_example.value = "hello"
+        # Dummy assert, important part is namespaced example was imported.
+        self.assertEqual(namespaced_example.value, "hello")
+
+    def test_grpc(self):
+        from foo.bar.namespaced_example_pb2_grpc import NamespacedServiceStub
+        # No error from import
+        self.assertEqual(1, 1)
+
+
+if __name__ == '__main__':
+    logging.basicConfig()
+    unittest.main()

+ 27 - 0
bazel/test/python_test_repo/namespaced/upper/example/namespaced_dependency.proto

@@ -0,0 +1,27 @@
+// Copyright 2020 The gRPC authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "io.grpc.examples.namespaced";
+option java_outer_classname = "NamespacedDependencyProtos";
+option objc_class_prefix = "NEP";
+
+package upper.example;
+
+
+message NamespacedDependency {
+  int32 value = 1;
+}

+ 38 - 0
bazel/test/python_test_repo/namespaced/upper/example/namespaced_example.proto

@@ -0,0 +1,38 @@
+// Copyright 2020 The gRPC authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "io.grpc.examples.namespaced";
+option java_outer_classname = "NamespacedExampleProtos";
+option objc_class_prefix = "NEP";
+
+package upper.example;
+
+// TODO: dependencies are still broken
+// Need to do something like this: https://packaging.python.org/guides/packaging-namespace-packages/
+// import "upper/example/namespaced_dependency.proto";
+
+message NamespacedExample {
+  string value = 1;
+
+  // TODO: dependencies are still broken
+  // NamespacedDependency dependency = 2;
+}
+
+service NamespacedService {
+  rpc SayHello (NamespacedExample) returns (NamespacedExample) {}
+}
+

+ 35 - 0
bazel/test/python_test_repo/namespaced/upper/example/no_import_no_strip_test.py

@@ -0,0 +1,35 @@
+# Copyright 2020 the gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+import unittest
+
+
+class ImportTest(unittest.TestCase):
+    def test_import(self):
+        from namespaced.upper.example.namespaced_example_pb2 import NamespacedExample
+        namespaced_example = NamespacedExample()
+        namespaced_example.value = "hello"
+        # Dummy assert, important part is namespaced example was imported.
+        self.assertEqual(namespaced_example.value, "hello")
+
+    def test_grpc(self):
+        from namespaced.upper.example.namespaced_example_pb2_grpc import NamespacedServiceStub
+        # No error from import
+        self.assertEqual(1, 1)
+
+
+if __name__ == '__main__':
+    logging.basicConfig()
+    unittest.main()

+ 35 - 0
bazel/test/python_test_repo/namespaced/upper/example/no_import_strip_test.py

@@ -0,0 +1,35 @@
+# Copyright 2020 the gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+import unittest
+
+
+class ImportTest(unittest.TestCase):
+    def test_import(self):
+        from namespaced_example_pb2 import NamespacedExample
+        namespaced_example = NamespacedExample()
+        namespaced_example.value = "hello"
+        # Dummy assert, important part is namespaced example was imported.
+        self.assertEqual(namespaced_example.value, "hello")
+
+    def test_grpc(self):
+        from namespaced_example_pb2_grpc import NamespacedServiceStub
+        # No error from import
+        self.assertEqual(1, 1)
+
+
+if __name__ == '__main__':
+    logging.basicConfig()
+    unittest.main()

+ 242 - 513
build_autogenerated.yaml

@@ -349,9 +349,11 @@ libs:
   - src/core/lib/profiling/stap_timers.cc
   deps:
   - absl/time:time
+  - absl/synchronization:synchronization
   - absl/strings:strings
   - absl/strings:str_format
   - absl/memory:memory
+  - absl/base:base
   secure: false
 - name: grpc
   build: all
@@ -460,144 +462,77 @@ libs:
   - src/core/ext/transport/chttp2/transport/varint.h
   - src/core/ext/transport/inproc/inproc_transport.h
   - src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h
-  - src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.h
   - src/core/ext/upb-generated/envoy/annotations/resource.upb.h
-  - src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/cds.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/eds.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/lds.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/rds.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/route.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/srds.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.h
-  - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h
-  - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.h
-  - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h
-  - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.h
-  - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h
-  - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.h
-  - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h
-  - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.h
-  - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h
-  - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.h
-  - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h
-  - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/http.upb.h
-  - src/core/ext/upb-generated/envoy/type/http.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h
-  - src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/matcher/string.upb.h
-  - src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h
-  - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/percent.upb.h
-  - src/core/ext/upb-generated/envoy/type/percent.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/range.upb.h
-  - src/core/ext/upb-generated/envoy/type/range.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/semantic_version.upb.h
-  - src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h
-  - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.h
+  - src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h
+  - src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h
+  - src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h
+  - src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h
+  - src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h
+  - src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h
+  - src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h
+  - src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h
+  - src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h
+  - src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h
+  - src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h
+  - src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h
+  - src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h
+  - src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h
+  - src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h
+  - src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h
+  - src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h
+  - src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h
+  - src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h
+  - src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h
+  - src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h
+  - src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h
+  - src/core/ext/upb-generated/envoy/type/v3/http.upb.h
+  - src/core/ext/upb-generated/envoy/type/v3/percent.upb.h
+  - src/core/ext/upb-generated/envoy/type/v3/range.upb.h
+  - src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h
   - src/core/ext/upb-generated/gogoproto/gogo.upb.h
-  - src/core/ext/upb-generated/gogoproto/gogo.upbdefs.h
   - src/core/ext/upb-generated/google/api/annotations.upb.h
-  - src/core/ext/upb-generated/google/api/annotations.upbdefs.h
   - src/core/ext/upb-generated/google/api/http.upb.h
-  - src/core/ext/upb-generated/google/api/http.upbdefs.h
   - src/core/ext/upb-generated/google/protobuf/any.upb.h
-  - src/core/ext/upb-generated/google/protobuf/any.upbdefs.h
-  - src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.h
+  - src/core/ext/upb-generated/google/protobuf/descriptor.upb.h
   - src/core/ext/upb-generated/google/protobuf/duration.upb.h
-  - src/core/ext/upb-generated/google/protobuf/duration.upbdefs.h
   - src/core/ext/upb-generated/google/protobuf/empty.upb.h
-  - src/core/ext/upb-generated/google/protobuf/empty.upbdefs.h
   - src/core/ext/upb-generated/google/protobuf/struct.upb.h
-  - src/core/ext/upb-generated/google/protobuf/struct.upbdefs.h
   - src/core/ext/upb-generated/google/protobuf/timestamp.upb.h
-  - src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.h
   - src/core/ext/upb-generated/google/protobuf/wrappers.upb.h
-  - src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.h
   - src/core/ext/upb-generated/google/rpc/status.upb.h
-  - src/core/ext/upb-generated/google/rpc/status.upbdefs.h
   - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h
   - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h
   - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h
   - src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h
   - src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h
   - src/core/ext/upb-generated/udpa/annotations/migrate.upb.h
-  - src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.h
   - src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h
-  - src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.h
   - src/core/ext/upb-generated/udpa/annotations/status.upb.h
-  - src/core/ext/upb-generated/udpa/annotations/status.upbdefs.h
+  - src/core/ext/upb-generated/udpa/annotations/versioning.upb.h
   - src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h
   - src/core/ext/upb-generated/validate/validate.upb.h
-  - src/core/ext/upb-generated/validate/validate.upbdefs.h
   - src/core/lib/avl/avl.h
   - src/core/lib/backoff/backoff.h
   - src/core/lib/channel/channel_args.h
@@ -739,16 +674,13 @@ libs:
   - src/core/lib/security/transport/auth_filters.h
   - src/core/lib/security/transport/secure_endpoint.h
   - src/core/lib/security/transport/security_handshaker.h
-  - src/core/lib/security/transport/target_authority_table.h
   - src/core/lib/security/transport/tsi_error.h
   - src/core/lib/security/util/json_util.h
   - src/core/lib/slice/b64.h
   - src/core/lib/slice/percent_encoding.h
-  - src/core/lib/slice/slice_hash_table.h
   - src/core/lib/slice/slice_internal.h
   - src/core/lib/slice/slice_string_helpers.h
   - src/core/lib/slice/slice_utils.h
-  - src/core/lib/slice/slice_weak_hash_table.h
   - src/core/lib/surface/api_trace.h
   - src/core/lib/surface/call.h
   - src/core/lib/surface/call_test_only.h
@@ -762,6 +694,7 @@ libs:
   - src/core/lib/surface/lame_client.h
   - src/core/lib/surface/server.h
   - src/core/lib/surface/validate_metadata.h
+  - src/core/lib/transport/authority_override.h
   - src/core/lib/transport/bdp_estimator.h
   - src/core/lib/transport/byte_stream.h
   - src/core/lib/transport/connectivity_state.h
@@ -918,144 +851,77 @@ libs:
   - src/core/ext/transport/inproc/inproc_plugin.cc
   - src/core/ext/transport/inproc/inproc_transport.cc
   - src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c
-  - src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c
   - src/core/ext/upb-generated/envoy/annotations/resource.upb.c
-  - src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/cds.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/eds.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/lds.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/rds.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/route.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/srds.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c
-  - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c
-  - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c
-  - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c
-  - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c
-  - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c
-  - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c
-  - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c
-  - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c
-  - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c
-  - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c
-  - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c
-  - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/http.upb.c
-  - src/core/ext/upb-generated/envoy/type/http.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c
-  - src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/matcher/string.upb.c
-  - src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c
-  - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/percent.upb.c
-  - src/core/ext/upb-generated/envoy/type/percent.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/range.upb.c
-  - src/core/ext/upb-generated/envoy/type/range.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/semantic_version.upb.c
-  - src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c
-  - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c
+  - src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c
+  - src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c
+  - src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c
+  - src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c
+  - src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c
+  - src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c
+  - src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c
+  - src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c
+  - src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c
+  - src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c
+  - src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c
+  - src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c
+  - src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c
+  - src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c
+  - src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c
+  - src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c
+  - src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c
+  - src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c
+  - src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c
+  - src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c
+  - src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c
+  - src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c
+  - src/core/ext/upb-generated/envoy/type/v3/http.upb.c
+  - src/core/ext/upb-generated/envoy/type/v3/percent.upb.c
+  - src/core/ext/upb-generated/envoy/type/v3/range.upb.c
+  - src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c
   - src/core/ext/upb-generated/gogoproto/gogo.upb.c
-  - src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c
   - src/core/ext/upb-generated/google/api/annotations.upb.c
-  - src/core/ext/upb-generated/google/api/annotations.upbdefs.c
   - src/core/ext/upb-generated/google/api/http.upb.c
-  - src/core/ext/upb-generated/google/api/http.upbdefs.c
   - src/core/ext/upb-generated/google/protobuf/any.upb.c
-  - src/core/ext/upb-generated/google/protobuf/any.upbdefs.c
-  - src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c
+  - src/core/ext/upb-generated/google/protobuf/descriptor.upb.c
   - src/core/ext/upb-generated/google/protobuf/duration.upb.c
-  - src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c
   - src/core/ext/upb-generated/google/protobuf/empty.upb.c
-  - src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c
   - src/core/ext/upb-generated/google/protobuf/struct.upb.c
-  - src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c
   - src/core/ext/upb-generated/google/protobuf/timestamp.upb.c
-  - src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c
   - src/core/ext/upb-generated/google/protobuf/wrappers.upb.c
-  - src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c
   - src/core/ext/upb-generated/google/rpc/status.upb.c
-  - src/core/ext/upb-generated/google/rpc/status.upbdefs.c
   - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c
   - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c
   - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c
   - src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c
   - src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c
   - src/core/ext/upb-generated/udpa/annotations/migrate.upb.c
-  - src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c
   - src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c
-  - src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c
   - src/core/ext/upb-generated/udpa/annotations/status.upb.c
-  - src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c
+  - src/core/ext/upb-generated/udpa/annotations/versioning.upb.c
   - src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c
   - src/core/ext/upb-generated/validate/validate.upb.c
-  - src/core/ext/upb-generated/validate/validate.upbdefs.c
   - src/core/lib/avl/avl.cc
   - src/core/lib/backoff/backoff.cc
   - src/core/lib/channel/channel_args.cc
@@ -1218,7 +1084,6 @@ libs:
   - src/core/lib/security/transport/secure_endpoint.cc
   - src/core/lib/security/transport/security_handshaker.cc
   - src/core/lib/security/transport/server_auth_filter.cc
-  - src/core/lib/security/transport/target_authority_table.cc
   - src/core/lib/security/transport/tsi_error.cc
   - src/core/lib/security/util/json_util.cc
   - src/core/lib/slice/b64.cc
@@ -1247,6 +1112,7 @@ libs:
   - src/core/lib/surface/server.cc
   - src/core/lib/surface/validate_metadata.cc
   - src/core/lib/surface/version.cc
+  - src/core/lib/transport/authority_override.cc
   - src/core/lib/transport/bdp_estimator.cc
   - src/core/lib/transport/byte_stream.cc
   - src/core/lib/transport/connectivity_state.cc
@@ -1295,6 +1161,7 @@ libs:
   - upb
   - absl/types:optional
   - absl/strings:strings
+  - absl/status:status
   - absl/container:inlined_vector
   baselib: true
   deps_linkage: static
@@ -1520,141 +1387,74 @@ libs:
   - src/core/ext/transport/chttp2/transport/varint.h
   - src/core/ext/transport/inproc/inproc_transport.h
   - src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h
-  - src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.h
   - src/core/ext/upb-generated/envoy/annotations/resource.upb.h
-  - src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/cds.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/eds.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/lds.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/rds.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/route.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.h
-  - src/core/ext/upb-generated/envoy/api/v2/srds.upb.h
-  - src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.h
-  - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h
-  - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.h
-  - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h
-  - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.h
-  - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h
-  - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.h
-  - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h
-  - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.h
-  - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h
-  - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.h
-  - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h
-  - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/http.upb.h
-  - src/core/ext/upb-generated/envoy/type/http.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h
-  - src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/matcher/string.upb.h
-  - src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h
-  - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/percent.upb.h
-  - src/core/ext/upb-generated/envoy/type/percent.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/range.upb.h
-  - src/core/ext/upb-generated/envoy/type/range.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/semantic_version.upb.h
-  - src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.h
-  - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h
-  - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.h
+  - src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h
+  - src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h
+  - src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h
+  - src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h
+  - src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h
+  - src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h
+  - src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h
+  - src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h
+  - src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h
+  - src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h
+  - src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h
+  - src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h
+  - src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h
+  - src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h
+  - src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h
+  - src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h
+  - src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h
+  - src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h
+  - src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h
+  - src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h
+  - src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h
+  - src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h
+  - src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h
+  - src/core/ext/upb-generated/envoy/type/v3/http.upb.h
+  - src/core/ext/upb-generated/envoy/type/v3/percent.upb.h
+  - src/core/ext/upb-generated/envoy/type/v3/range.upb.h
+  - src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h
   - src/core/ext/upb-generated/gogoproto/gogo.upb.h
-  - src/core/ext/upb-generated/gogoproto/gogo.upbdefs.h
   - src/core/ext/upb-generated/google/api/annotations.upb.h
-  - src/core/ext/upb-generated/google/api/annotations.upbdefs.h
   - src/core/ext/upb-generated/google/api/http.upb.h
-  - src/core/ext/upb-generated/google/api/http.upbdefs.h
   - src/core/ext/upb-generated/google/protobuf/any.upb.h
-  - src/core/ext/upb-generated/google/protobuf/any.upbdefs.h
-  - src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.h
+  - src/core/ext/upb-generated/google/protobuf/descriptor.upb.h
   - src/core/ext/upb-generated/google/protobuf/duration.upb.h
-  - src/core/ext/upb-generated/google/protobuf/duration.upbdefs.h
   - src/core/ext/upb-generated/google/protobuf/empty.upb.h
-  - src/core/ext/upb-generated/google/protobuf/empty.upbdefs.h
   - src/core/ext/upb-generated/google/protobuf/struct.upb.h
-  - src/core/ext/upb-generated/google/protobuf/struct.upbdefs.h
   - src/core/ext/upb-generated/google/protobuf/timestamp.upb.h
-  - src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.h
   - src/core/ext/upb-generated/google/protobuf/wrappers.upb.h
-  - src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.h
   - src/core/ext/upb-generated/google/rpc/status.upb.h
-  - src/core/ext/upb-generated/google/rpc/status.upbdefs.h
   - src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h
   - src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h
   - src/core/ext/upb-generated/udpa/annotations/migrate.upb.h
-  - src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.h
   - src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h
-  - src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.h
   - src/core/ext/upb-generated/udpa/annotations/status.upb.h
-  - src/core/ext/upb-generated/udpa/annotations/status.upbdefs.h
+  - src/core/ext/upb-generated/udpa/annotations/versioning.upb.h
   - src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h
   - src/core/ext/upb-generated/validate/validate.upb.h
-  - src/core/ext/upb-generated/validate/validate.upbdefs.h
   - src/core/lib/avl/avl.h
   - src/core/lib/backoff/backoff.h
   - src/core/lib/channel/channel_args.h
@@ -1767,11 +1567,9 @@ libs:
   - src/core/lib/json/json.h
   - src/core/lib/slice/b64.h
   - src/core/lib/slice/percent_encoding.h
-  - src/core/lib/slice/slice_hash_table.h
   - src/core/lib/slice/slice_internal.h
   - src/core/lib/slice/slice_string_helpers.h
   - src/core/lib/slice/slice_utils.h
-  - src/core/lib/slice/slice_weak_hash_table.h
   - src/core/lib/surface/api_trace.h
   - src/core/lib/surface/call.h
   - src/core/lib/surface/call_test_only.h
@@ -1785,6 +1583,7 @@ libs:
   - src/core/lib/surface/lame_client.h
   - src/core/lib/surface/server.h
   - src/core/lib/surface/validate_metadata.h
+  - src/core/lib/transport/authority_override.h
   - src/core/lib/transport/bdp_estimator.h
   - src/core/lib/transport/byte_stream.h
   - src/core/lib/transport/connectivity_state.h
@@ -1912,141 +1711,74 @@ libs:
   - src/core/ext/transport/inproc/inproc_plugin.cc
   - src/core/ext/transport/inproc/inproc_transport.cc
   - src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c
-  - src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c
   - src/core/ext/upb-generated/envoy/annotations/resource.upb.c
-  - src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/cds.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/eds.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/lds.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/rds.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/route.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c
-  - src/core/ext/upb-generated/envoy/api/v2/srds.upb.c
-  - src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c
-  - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c
-  - src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c
-  - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c
-  - src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c
-  - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c
-  - src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c
-  - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c
-  - src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c
-  - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c
-  - src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c
-  - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c
-  - src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/http.upb.c
-  - src/core/ext/upb-generated/envoy/type/http.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c
-  - src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/matcher/string.upb.c
-  - src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c
-  - src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/percent.upb.c
-  - src/core/ext/upb-generated/envoy/type/percent.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/range.upb.c
-  - src/core/ext/upb-generated/envoy/type/range.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/semantic_version.upb.c
-  - src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c
-  - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c
-  - src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c
+  - src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c
+  - src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c
+  - src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c
+  - src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c
+  - src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c
+  - src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c
+  - src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c
+  - src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c
+  - src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c
+  - src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c
+  - src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c
+  - src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c
+  - src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c
+  - src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c
+  - src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c
+  - src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c
+  - src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c
+  - src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c
+  - src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c
+  - src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c
+  - src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c
+  - src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c
+  - src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c
+  - src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c
+  - src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c
+  - src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c
+  - src/core/ext/upb-generated/envoy/type/v3/http.upb.c
+  - src/core/ext/upb-generated/envoy/type/v3/percent.upb.c
+  - src/core/ext/upb-generated/envoy/type/v3/range.upb.c
+  - src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c
   - src/core/ext/upb-generated/gogoproto/gogo.upb.c
-  - src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c
   - src/core/ext/upb-generated/google/api/annotations.upb.c
-  - src/core/ext/upb-generated/google/api/annotations.upbdefs.c
   - src/core/ext/upb-generated/google/api/http.upb.c
-  - src/core/ext/upb-generated/google/api/http.upbdefs.c
   - src/core/ext/upb-generated/google/protobuf/any.upb.c
-  - src/core/ext/upb-generated/google/protobuf/any.upbdefs.c
-  - src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c
+  - src/core/ext/upb-generated/google/protobuf/descriptor.upb.c
   - src/core/ext/upb-generated/google/protobuf/duration.upb.c
-  - src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c
   - src/core/ext/upb-generated/google/protobuf/empty.upb.c
-  - src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c
   - src/core/ext/upb-generated/google/protobuf/struct.upb.c
-  - src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c
   - src/core/ext/upb-generated/google/protobuf/timestamp.upb.c
-  - src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c
   - src/core/ext/upb-generated/google/protobuf/wrappers.upb.c
-  - src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c
   - src/core/ext/upb-generated/google/rpc/status.upb.c
-  - src/core/ext/upb-generated/google/rpc/status.upbdefs.c
   - src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c
   - src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c
   - src/core/ext/upb-generated/udpa/annotations/migrate.upb.c
-  - src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c
   - src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c
-  - src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c
   - src/core/ext/upb-generated/udpa/annotations/status.upb.c
-  - src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c
+  - src/core/ext/upb-generated/udpa/annotations/versioning.upb.c
   - src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c
   - src/core/ext/upb-generated/validate/validate.upb.c
-  - src/core/ext/upb-generated/validate/validate.upbdefs.c
   - src/core/lib/avl/avl.cc
   - src/core/lib/backoff/backoff.cc
   - src/core/lib/channel/channel_args.cc
@@ -2195,6 +1927,7 @@ libs:
   - src/core/lib/surface/server.cc
   - src/core/lib/surface/validate_metadata.cc
   - src/core/lib/surface/version.cc
+  - src/core/lib/transport/authority_override.cc
   - src/core/lib/transport/bdp_estimator.cc
   - src/core/lib/transport/byte_stream.cc
   - src/core/lib/transport/connectivity_state.cc
@@ -2216,6 +1949,7 @@ libs:
   - upb
   - absl/types:optional
   - absl/strings:strings
+  - absl/status:status
   - absl/container:inlined_vector
   baselib: true
   deps_linkage: static
@@ -2334,12 +2068,10 @@ libs:
   - include/grpcpp/completion_queue.h
   - include/grpcpp/completion_queue_impl.h
   - include/grpcpp/create_channel.h
-  - include/grpcpp/create_channel_impl.h
   - include/grpcpp/create_channel_posix.h
   - include/grpcpp/ext/health_check_service_server_builder_option.h
   - include/grpcpp/generic/async_generic_service.h
   - include/grpcpp/generic/generic_stub.h
-  - include/grpcpp/generic/generic_stub_impl.h
   - include/grpcpp/grpcpp.h
   - include/grpcpp/health_check_service_interface.h
   - include/grpcpp/impl/call.h
@@ -2418,11 +2150,8 @@ libs:
   - include/grpcpp/resource_quota.h
   - include/grpcpp/security/auth_context.h
   - include/grpcpp/security/auth_metadata_processor.h
-  - include/grpcpp/security/auth_metadata_processor_impl.h
   - include/grpcpp/security/credentials.h
-  - include/grpcpp/security/credentials_impl.h
   - include/grpcpp/security/server_credentials.h
-  - include/grpcpp/security/server_credentials_impl.h
   - include/grpcpp/security/tls_credentials_options.h
   - include/grpcpp/server.h
   - include/grpcpp/server_builder.h
@@ -2564,7 +2293,6 @@ libs:
   public_headers:
   - include/grpc++/ext/proto_server_reflection_plugin.h
   - include/grpcpp/ext/proto_server_reflection_plugin.h
-  - include/grpcpp/ext/proto_server_reflection_plugin_impl.h
   headers:
   - src/cpp/ext/proto_server_reflection.h
   src:
@@ -2723,12 +2451,10 @@ libs:
   - include/grpcpp/completion_queue.h
   - include/grpcpp/completion_queue_impl.h
   - include/grpcpp/create_channel.h
-  - include/grpcpp/create_channel_impl.h
   - include/grpcpp/create_channel_posix.h
   - include/grpcpp/ext/health_check_service_server_builder_option.h
   - include/grpcpp/generic/async_generic_service.h
   - include/grpcpp/generic/generic_stub.h
-  - include/grpcpp/generic/generic_stub_impl.h
   - include/grpcpp/grpcpp.h
   - include/grpcpp/health_check_service_interface.h
   - include/grpcpp/impl/call.h
@@ -2807,11 +2533,8 @@ libs:
   - include/grpcpp/resource_quota.h
   - include/grpcpp/security/auth_context.h
   - include/grpcpp/security/auth_metadata_processor.h
-  - include/grpcpp/security/auth_metadata_processor_impl.h
   - include/grpcpp/security/credentials.h
-  - include/grpcpp/security/credentials_impl.h
   - include/grpcpp/security/server_credentials.h
-  - include/grpcpp/security/server_credentials_impl.h
   - include/grpcpp/security/tls_credentials_options.h
   - include/grpcpp/server.h
   - include/grpcpp/server_builder.h
@@ -7392,34 +7115,6 @@ targets:
   - gpr
   - address_sorting
   - upb
-- name: slice_hash_table_test
-  gtest: true
-  build: test
-  language: c++
-  headers: []
-  src:
-  - test/core/slice/slice_hash_table_test.cc
-  deps:
-  - grpc_test_util
-  - grpc
-  - gpr
-  - address_sorting
-  - upb
-  uses_polling: false
-- name: slice_weak_hash_table_test
-  gtest: true
-  build: test
-  language: c++
-  headers: []
-  src:
-  - test/core/slice/slice_weak_hash_table_test.cc
-  deps:
-  - grpc_test_util
-  - grpc
-  - gpr
-  - address_sorting
-  - upb
-  uses_polling: false
 - name: ssl_server_fuzzer
   build: fuzzer
   language: c++
@@ -7492,6 +7187,25 @@ targets:
   - address_sorting
   - upb
   uses_polling: false
+- name: stranded_event_test
+  gtest: true
+  build: test
+  language: c++
+  headers:
+  - test/core/end2end/cq_verifier.h
+  src:
+  - test/core/end2end/cq_verifier.cc
+  - test/core/iomgr/stranded_event_test.cc
+  deps:
+  - grpc_test_util
+  - grpc
+  - gpr
+  - address_sorting
+  - upb
+  platforms:
+  - linux
+  - posix
+  - mac
 - name: streaming_throughput_test
   gtest: true
   build: test
@@ -7835,6 +7549,21 @@ targets:
   - src/proto/grpc/testing/xds/eds_for_test.proto
   - src/proto/grpc/testing/xds/lds_rds_for_test.proto
   - src/proto/grpc/testing/xds/lrs_for_test.proto
+  - src/proto/grpc/testing/xds/v3/address.proto
+  - src/proto/grpc/testing/xds/v3/ads.proto
+  - src/proto/grpc/testing/xds/v3/base.proto
+  - src/proto/grpc/testing/xds/v3/cluster.proto
+  - src/proto/grpc/testing/xds/v3/config_source.proto
+  - src/proto/grpc/testing/xds/v3/discovery.proto
+  - src/proto/grpc/testing/xds/v3/endpoint.proto
+  - src/proto/grpc/testing/xds/v3/http_connection_manager.proto
+  - src/proto/grpc/testing/xds/v3/listener.proto
+  - src/proto/grpc/testing/xds/v3/load_report.proto
+  - src/proto/grpc/testing/xds/v3/lrs.proto
+  - src/proto/grpc/testing/xds/v3/percent.proto
+  - src/proto/grpc/testing/xds/v3/range.proto
+  - src/proto/grpc/testing/xds/v3/regex.proto
+  - src/proto/grpc/testing/xds/v3/route.proto
   - test/cpp/end2end/test_service_impl.cc
   - test/cpp/end2end/xds_end2end_test.cc
   deps:

+ 4 - 2
build_handwritten.yaml

@@ -14,8 +14,8 @@ settings:
   '#10': See the expand_version.py for all the quirks here
   core_version: 11.0.0
   csharp_major_version: 2
-  g_stands_for: galore
-  version: 1.31.0-dev
+  g_stands_for: giggle
+  version: 1.32.0-dev
 targets:
 - name: check_epollexclusive
   build: tool
@@ -224,6 +224,7 @@ php_config_m4:
   - grpc
   - address_sorting
   - boringssl
+  - re2
   - z
   headers:
   - src/php/ext/grpc/byte_buffer.h
@@ -263,4 +264,5 @@ ruby_gem:
   - address_sorting
   - ares
   - boringssl
+  - re2
   - z

+ 3 - 0
cmake/re2.cmake

@@ -21,6 +21,9 @@ if(gRPC_RE2_PROVIDER STREQUAL "module")
     set(RE2_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/re2)
   endif()
   if(EXISTS "${RE2_ROOT_DIR}/CMakeLists.txt")
+    # Explicitly disable BUILD_TESTING to avoid re2's CMakeLists.txt triggering https://github.com/grpc/grpc/issues/23586
+    option(BUILD_TESTING "re2.cmake explicitly disabled CTest's BUILD_TESTING option." OFF)
+
     include_directories("${RE2_ROOT_DIR}")
     add_subdirectory(${RE2_ROOT_DIR} third_party/re2)
 

+ 117 - 138
config.m4

@@ -151,145 +151,77 @@ if test "$PHP_GRPC" != "no"; then
     src/core/ext/transport/inproc/inproc_plugin.cc \
     src/core/ext/transport/inproc/inproc_transport.cc \
     src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c \
-    src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c \
     src/core/ext/upb-generated/envoy/annotations/resource.upb.c \
-    src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/cds.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/eds.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/lds.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/listener.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/rds.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/route.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c \
-    src/core/ext/upb-generated/envoy/api/v2/srds.upb.c \
-    src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c \
-    src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c \
-    src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c \
-    src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c \
-    src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c \
-    src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c \
-    src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c \
-    src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c \
-    src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c \
-    src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c \
-    src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c \
-    src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c \
-    src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c \
-    src/core/ext/upb-generated/envoy/type/http.upb.c \
-    src/core/ext/upb-generated/envoy/type/http.upbdefs.c \
-    src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c \
-    src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c \
-    src/core/ext/upb-generated/envoy/type/matcher/string.upb.c \
-    src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c \
-    src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c \
-    src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c \
-    src/core/ext/upb-generated/envoy/type/percent.upb.c \
-    src/core/ext/upb-generated/envoy/type/percent.upbdefs.c \
-    src/core/ext/upb-generated/envoy/type/range.upb.c \
-    src/core/ext/upb-generated/envoy/type/range.upbdefs.c \
-    src/core/ext/upb-generated/envoy/type/semantic_version.upb.c \
-    src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c \
-    src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c \
-    src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c \
+    src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c \
+    src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c \
+    src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c \
+    src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c \
+    src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c \
+    src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c \
+    src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c \
+    src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c \
+    src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c \
+    src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c \
+    src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c \
+    src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c \
+    src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c \
+    src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c \
+    src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c \
+    src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c \
+    src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c \
+    src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c \
+    src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c \
+    src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c \
+    src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c \
+    src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c \
+    src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c \
+    src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c \
+    src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c \
+    src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c \
+    src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c \
+    src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c \
+    src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c \
+    src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c \
+    src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c \
+    src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c \
+    src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c \
+    src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c \
+    src/core/ext/upb-generated/envoy/type/v3/http.upb.c \
+    src/core/ext/upb-generated/envoy/type/v3/percent.upb.c \
+    src/core/ext/upb-generated/envoy/type/v3/range.upb.c \
+    src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c \
     src/core/ext/upb-generated/gogoproto/gogo.upb.c \
-    src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c \
     src/core/ext/upb-generated/google/api/annotations.upb.c \
-    src/core/ext/upb-generated/google/api/annotations.upbdefs.c \
     src/core/ext/upb-generated/google/api/http.upb.c \
-    src/core/ext/upb-generated/google/api/http.upbdefs.c \
     src/core/ext/upb-generated/google/protobuf/any.upb.c \
-    src/core/ext/upb-generated/google/protobuf/any.upbdefs.c \
     src/core/ext/upb-generated/google/protobuf/descriptor.upb.c \
-    src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c \
     src/core/ext/upb-generated/google/protobuf/duration.upb.c \
-    src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c \
     src/core/ext/upb-generated/google/protobuf/empty.upb.c \
-    src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c \
     src/core/ext/upb-generated/google/protobuf/struct.upb.c \
-    src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c \
     src/core/ext/upb-generated/google/protobuf/timestamp.upb.c \
-    src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c \
     src/core/ext/upb-generated/google/protobuf/wrappers.upb.c \
-    src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c \
     src/core/ext/upb-generated/google/rpc/status.upb.c \
-    src/core/ext/upb-generated/google/rpc/status.upbdefs.c \
     src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c \
     src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c \
     src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c \
     src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \
     src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c \
     src/core/ext/upb-generated/udpa/annotations/migrate.upb.c \
-    src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c \
     src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c \
-    src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c \
     src/core/ext/upb-generated/udpa/annotations/status.upb.c \
-    src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c \
+    src/core/ext/upb-generated/udpa/annotations/versioning.upb.c \
     src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c \
     src/core/ext/upb-generated/validate/validate.upb.c \
-    src/core/ext/upb-generated/validate/validate.upbdefs.c \
     src/core/lib/avl/avl.cc \
     src/core/lib/backoff/backoff.cc \
     src/core/lib/channel/channel_args.cc \
@@ -493,7 +425,6 @@ if test "$PHP_GRPC" != "no"; then
     src/core/lib/security/transport/secure_endpoint.cc \
     src/core/lib/security/transport/security_handshaker.cc \
     src/core/lib/security/transport/server_auth_filter.cc \
-    src/core/lib/security/transport/target_authority_table.cc \
     src/core/lib/security/transport/tsi_error.cc \
     src/core/lib/security/util/json_util.cc \
     src/core/lib/slice/b64.cc \
@@ -522,6 +453,7 @@ if test "$PHP_GRPC" != "no"; then
     src/core/lib/surface/server.cc \
     src/core/lib/surface/validate_metadata.cc \
     src/core/lib/surface/version.cc \
+    src/core/lib/transport/authority_override.cc \
     src/core/lib/transport/bdp_estimator.cc \
     src/core/lib/transport/byte_stream.cc \
     src/core/lib/transport/connectivity_state.cc \
@@ -576,6 +508,7 @@ if test "$PHP_GRPC" != "no"; then
     src/php/ext/grpc/timeval.c \
     third_party/abseil-cpp/absl/base/dynamic_annotations.cc \
     third_party/abseil-cpp/absl/base/internal/cycleclock.cc \
+    third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc \
     third_party/abseil-cpp/absl/base/internal/raw_logging.cc \
     third_party/abseil-cpp/absl/base/internal/spinlock.cc \
     third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc \
@@ -584,9 +517,18 @@ if test "$PHP_GRPC" != "no"; then
     third_party/abseil-cpp/absl/base/internal/throw_delegate.cc \
     third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc \
     third_party/abseil-cpp/absl/base/log_severity.cc \
+    third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc \
+    third_party/abseil-cpp/absl/debugging/internal/demangle.cc \
+    third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc \
+    third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc \
+    third_party/abseil-cpp/absl/debugging/stacktrace.cc \
+    third_party/abseil-cpp/absl/debugging/symbolize.cc \
     third_party/abseil-cpp/absl/numeric/int128.cc \
+    third_party/abseil-cpp/absl/status/status.cc \
+    third_party/abseil-cpp/absl/status/status_payload_printer.cc \
     third_party/abseil-cpp/absl/strings/ascii.cc \
     third_party/abseil-cpp/absl/strings/charconv.cc \
+    third_party/abseil-cpp/absl/strings/cord.cc \
     third_party/abseil-cpp/absl/strings/escaping.cc \
     third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc \
     third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc \
@@ -607,6 +549,14 @@ if test "$PHP_GRPC" != "no"; then
     third_party/abseil-cpp/absl/strings/str_split.cc \
     third_party/abseil-cpp/absl/strings/string_view.cc \
     third_party/abseil-cpp/absl/strings/substitute.cc \
+    third_party/abseil-cpp/absl/synchronization/barrier.cc \
+    third_party/abseil-cpp/absl/synchronization/blocking_counter.cc \
+    third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc \
+    third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc \
+    third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc \
+    third_party/abseil-cpp/absl/synchronization/internal/waiter.cc \
+    third_party/abseil-cpp/absl/synchronization/mutex.cc \
+    third_party/abseil-cpp/absl/synchronization/notification.cc \
     third_party/abseil-cpp/absl/time/civil_time.cc \
     third_party/abseil-cpp/absl/time/clock.cc \
     third_party/abseil-cpp/absl/time/duration.cc \
@@ -893,14 +843,34 @@ if test "$PHP_GRPC" != "no"; then
     third_party/boringssl-with-bazel/src/ssl/tls13_server.cc \
     third_party/boringssl-with-bazel/src/ssl/tls_method.cc \
     third_party/boringssl-with-bazel/src/ssl/tls_record.cc \
+    third_party/re2/re2/bitstate.cc \
+    third_party/re2/re2/compile.cc \
+    third_party/re2/re2/dfa.cc \
+    third_party/re2/re2/filtered_re2.cc \
+    third_party/re2/re2/mimics_pcre.cc \
+    third_party/re2/re2/nfa.cc \
+    third_party/re2/re2/onepass.cc \
+    third_party/re2/re2/parse.cc \
+    third_party/re2/re2/perl_groups.cc \
+    third_party/re2/re2/prefilter.cc \
+    third_party/re2/re2/prefilter_tree.cc \
+    third_party/re2/re2/prog.cc \
+    third_party/re2/re2/re2.cc \
+    third_party/re2/re2/regexp.cc \
+    third_party/re2/re2/set.cc \
+    third_party/re2/re2/simplify.cc \
+    third_party/re2/re2/stringpiece.cc \
+    third_party/re2/re2/tostring.cc \
+    third_party/re2/re2/unicode_casefold.cc \
+    third_party/re2/re2/unicode_groups.cc \
+    third_party/re2/util/pcre.cc \
+    third_party/re2/util/rune.cc \
+    third_party/re2/util/strutil.cc \
     third_party/upb/upb/decode.c \
-    third_party/upb/upb/def.c \
     third_party/upb/upb/encode.c \
     third_party/upb/upb/msg.c \
     third_party/upb/upb/port.c \
-    third_party/upb/upb/reflection.c \
     third_party/upb/upb/table.c \
-    third_party/upb/upb/text_encode.c \
     third_party/upb/upb/upb.c \
     , $ext_shared, , -fvisibility=hidden \
     -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN \
@@ -943,23 +913,25 @@ if test "$PHP_GRPC" != "no"; then
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/transport)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/inproc)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/annotations)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/auth)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/cluster)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/core)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/endpoint)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/listener)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/api/v2/route)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/listener/v2)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/trace/v2)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/discovery/v2)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/load_stats/v2)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/matcher)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/metadata/v2)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/tracing/v2)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/accesslog/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/cluster/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/core/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/endpoint/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/listener/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/route/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/config/trace/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/cluster/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/discovery/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/endpoint/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/listener/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/load_stats/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/service/route/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/matcher/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/metadata/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/tracing/v3)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/envoy/type/v3)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/gogoproto)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/api)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/protobuf)
@@ -1018,10 +990,15 @@ if test "$PHP_GRPC" != "no"; then
   PHP_ADD_BUILD_DIR($ext_builddir/src/php/ext/grpc)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/base)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/base/internal)
+  PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/debugging)
+  PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/debugging/internal)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/numeric)
+  PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/status)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/strings)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/strings/internal)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/strings/internal/str_format)
+  PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/synchronization)
+  PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/synchronization/internal)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/time)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/time/internal/cctz/src)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/types)
@@ -1067,5 +1044,7 @@ if test "$PHP_GRPC" != "no"; then
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/x509)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/x509v3)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/ssl)
+  PHP_ADD_BUILD_DIR($ext_builddir/third_party/re2/re2)
+  PHP_ADD_BUILD_DIR($ext_builddir/third_party/re2/util)
   PHP_ADD_BUILD_DIR($ext_builddir/third_party/upb/upb)
 fi

+ 133 - 141
config.w32

@@ -119,145 +119,77 @@ if (PHP_GRPC != "no") {
     "src\\core\\ext\\transport\\inproc\\inproc_plugin.cc " +
     "src\\core\\ext\\transport\\inproc\\inproc_transport.cc " +
     "src\\core\\ext\\upb-generated\\envoy\\annotations\\deprecation.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\annotations\\deprecation.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\envoy\\annotations\\resource.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\annotations\\resource.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\cert.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\cert.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\common.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\common.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\secret.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\secret.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\tls.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth\\tls.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cds.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cds.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\circuit_breaker.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\circuit_breaker.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\filter.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\filter.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\outlier_detection.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster\\outlier_detection.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\address.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\address.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\backoff.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\backoff.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\base.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\base.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\config_source.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\config_source.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\event_service_config.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\event_service_config.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\grpc_service.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\grpc_service.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\health_check.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\health_check.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\http_uri.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\http_uri.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\protocol.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\protocol.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\socket_option.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core\\socket_option.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\discovery.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\discovery.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\eds.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\eds.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\endpoint.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\endpoint.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\endpoint_components.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\endpoint_components.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\load_report.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint\\load_report.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\lds.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\lds.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\listener.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\listener.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\listener_components.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\listener_components.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\udp_listener_config.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener\\udp_listener_config.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\rds.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\rds.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route\\route.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route\\route.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route\\route_components.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route\\route_components.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\scoped_route.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\scoped_route.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\srds.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\api\\v2\\srds.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\config\\filter\\accesslog\\v2\\accesslog.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\config\\filter\\accesslog\\v2\\accesslog.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network\\http_connection_manager\\v2\\http_connection_manager.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network\\http_connection_manager\\v2\\http_connection_manager.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v2\\api_listener.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v2\\api_listener.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\config\\trace\\v2\\http_tracer.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\config\\trace\\v2\\http_tracer.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v2\\ads.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v2\\ads.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v2\\lrs.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v2\\lrs.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\http.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\http.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\regex.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\regex.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\string.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\string.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\metadata\\v2\\metadata.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\metadata\\v2\\metadata.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\percent.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\percent.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\range.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\range.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\semantic_version.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\semantic_version.upbdefs.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\tracing\\v2\\custom_tag.upb.c " +
-    "src\\core\\ext\\upb-generated\\envoy\\type\\tracing\\v2\\custom_tag.upbdefs.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\accesslog\\v3\\accesslog.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\cluster\\v3\\circuit_breaker.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\cluster\\v3\\cluster.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\cluster\\v3\\filter.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\cluster\\v3\\outlier_detection.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\address.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\backoff.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\base.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\config_source.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\event_service_config.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\grpc_service.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\health_check.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\http_uri.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\protocol.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\proxy_protocol.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3\\socket_option.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\endpoint\\v3\\endpoint.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\endpoint\\v3\\endpoint_components.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\endpoint\\v3\\load_report.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v3\\api_listener.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v3\\listener.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v3\\listener_components.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v3\\udp_listener_config.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\route\\v3\\route.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\route\\v3\\route_components.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\route\\v3\\scoped_route.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\config\\trace\\v3\\http_tracer.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\network\\http_connection_manager\\v3\\http_connection_manager.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\extensions\\transport_sockets\\tls\\v3\\cert.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\extensions\\transport_sockets\\tls\\v3\\common.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\extensions\\transport_sockets\\tls\\v3\\secret.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\extensions\\transport_sockets\\tls\\v3\\tls.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\service\\cluster\\v3\\cds.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v3\\ads.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v3\\discovery.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\service\\endpoint\\v3\\eds.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\service\\listener\\v3\\lds.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v3\\lrs.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\service\\route\\v3\\rds.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\service\\route\\v3\\srds.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\v3\\regex.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\v3\\string.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\type\\metadata\\v3\\metadata.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\type\\tracing\\v3\\custom_tag.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\type\\v3\\http.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\type\\v3\\percent.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\type\\v3\\range.upb.c " +
+    "src\\core\\ext\\upb-generated\\envoy\\type\\v3\\semantic_version.upb.c " +
     "src\\core\\ext\\upb-generated\\gogoproto\\gogo.upb.c " +
-    "src\\core\\ext\\upb-generated\\gogoproto\\gogo.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\google\\api\\annotations.upb.c " +
-    "src\\core\\ext\\upb-generated\\google\\api\\annotations.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\google\\api\\http.upb.c " +
-    "src\\core\\ext\\upb-generated\\google\\api\\http.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\google\\protobuf\\any.upb.c " +
-    "src\\core\\ext\\upb-generated\\google\\protobuf\\any.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\google\\protobuf\\descriptor.upb.c " +
-    "src\\core\\ext\\upb-generated\\google\\protobuf\\descriptor.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\google\\protobuf\\duration.upb.c " +
-    "src\\core\\ext\\upb-generated\\google\\protobuf\\duration.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\google\\protobuf\\empty.upb.c " +
-    "src\\core\\ext\\upb-generated\\google\\protobuf\\empty.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\google\\protobuf\\struct.upb.c " +
-    "src\\core\\ext\\upb-generated\\google\\protobuf\\struct.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\google\\protobuf\\timestamp.upb.c " +
-    "src\\core\\ext\\upb-generated\\google\\protobuf\\timestamp.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\google\\protobuf\\wrappers.upb.c " +
-    "src\\core\\ext\\upb-generated\\google\\protobuf\\wrappers.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\google\\rpc\\status.upb.c " +
-    "src\\core\\ext\\upb-generated\\google\\rpc\\status.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\altscontext.upb.c " +
     "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\handshaker.upb.c " +
     "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\transport_security_common.upb.c " +
     "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\health\\v1\\health.upb.c " +
     "src\\core\\ext\\upb-generated\\src\\proto\\grpc\\lb\\v1\\load_balancer.upb.c " +
     "src\\core\\ext\\upb-generated\\udpa\\annotations\\migrate.upb.c " +
-    "src\\core\\ext\\upb-generated\\udpa\\annotations\\migrate.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\udpa\\annotations\\sensitive.upb.c " +
-    "src\\core\\ext\\upb-generated\\udpa\\annotations\\sensitive.upbdefs.c " +
     "src\\core\\ext\\upb-generated\\udpa\\annotations\\status.upb.c " +
-    "src\\core\\ext\\upb-generated\\udpa\\annotations\\status.upbdefs.c " +
+    "src\\core\\ext\\upb-generated\\udpa\\annotations\\versioning.upb.c " +
     "src\\core\\ext\\upb-generated\\udpa\\data\\orca\\v1\\orca_load_report.upb.c " +
     "src\\core\\ext\\upb-generated\\validate\\validate.upb.c " +
-    "src\\core\\ext\\upb-generated\\validate\\validate.upbdefs.c " +
     "src\\core\\lib\\avl\\avl.cc " +
     "src\\core\\lib\\backoff\\backoff.cc " +
     "src\\core\\lib\\channel\\channel_args.cc " +
@@ -461,7 +393,6 @@ if (PHP_GRPC != "no") {
     "src\\core\\lib\\security\\transport\\secure_endpoint.cc " +
     "src\\core\\lib\\security\\transport\\security_handshaker.cc " +
     "src\\core\\lib\\security\\transport\\server_auth_filter.cc " +
-    "src\\core\\lib\\security\\transport\\target_authority_table.cc " +
     "src\\core\\lib\\security\\transport\\tsi_error.cc " +
     "src\\core\\lib\\security\\util\\json_util.cc " +
     "src\\core\\lib\\slice\\b64.cc " +
@@ -490,6 +421,7 @@ if (PHP_GRPC != "no") {
     "src\\core\\lib\\surface\\server.cc " +
     "src\\core\\lib\\surface\\validate_metadata.cc " +
     "src\\core\\lib\\surface\\version.cc " +
+    "src\\core\\lib\\transport\\authority_override.cc " +
     "src\\core\\lib\\transport\\bdp_estimator.cc " +
     "src\\core\\lib\\transport\\byte_stream.cc " +
     "src\\core\\lib\\transport\\connectivity_state.cc " +
@@ -544,6 +476,7 @@ if (PHP_GRPC != "no") {
     "src\\php\\ext\\grpc\\timeval.c " +
     "third_party\\abseil-cpp\\absl\\base\\dynamic_annotations.cc " +
     "third_party\\abseil-cpp\\absl\\base\\internal\\cycleclock.cc " +
+    "third_party\\abseil-cpp\\absl\\base\\internal\\low_level_alloc.cc " +
     "third_party\\abseil-cpp\\absl\\base\\internal\\raw_logging.cc " +
     "third_party\\abseil-cpp\\absl\\base\\internal\\spinlock.cc " +
     "third_party\\abseil-cpp\\absl\\base\\internal\\spinlock_wait.cc " +
@@ -552,9 +485,18 @@ if (PHP_GRPC != "no") {
     "third_party\\abseil-cpp\\absl\\base\\internal\\throw_delegate.cc " +
     "third_party\\abseil-cpp\\absl\\base\\internal\\unscaledcycleclock.cc " +
     "third_party\\abseil-cpp\\absl\\base\\log_severity.cc " +
+    "third_party\\abseil-cpp\\absl\\debugging\\internal\\address_is_readable.cc " +
+    "third_party\\abseil-cpp\\absl\\debugging\\internal\\demangle.cc " +
+    "third_party\\abseil-cpp\\absl\\debugging\\internal\\elf_mem_image.cc " +
+    "third_party\\abseil-cpp\\absl\\debugging\\internal\\vdso_support.cc " +
+    "third_party\\abseil-cpp\\absl\\debugging\\stacktrace.cc " +
+    "third_party\\abseil-cpp\\absl\\debugging\\symbolize.cc " +
     "third_party\\abseil-cpp\\absl\\numeric\\int128.cc " +
+    "third_party\\abseil-cpp\\absl\\status\\status.cc " +
+    "third_party\\abseil-cpp\\absl\\status\\status_payload_printer.cc " +
     "third_party\\abseil-cpp\\absl\\strings\\ascii.cc " +
     "third_party\\abseil-cpp\\absl\\strings\\charconv.cc " +
+    "third_party\\abseil-cpp\\absl\\strings\\cord.cc " +
     "third_party\\abseil-cpp\\absl\\strings\\escaping.cc " +
     "third_party\\abseil-cpp\\absl\\strings\\internal\\charconv_bigint.cc " +
     "third_party\\abseil-cpp\\absl\\strings\\internal\\charconv_parse.cc " +
@@ -575,6 +517,14 @@ if (PHP_GRPC != "no") {
     "third_party\\abseil-cpp\\absl\\strings\\str_split.cc " +
     "third_party\\abseil-cpp\\absl\\strings\\string_view.cc " +
     "third_party\\abseil-cpp\\absl\\strings\\substitute.cc " +
+    "third_party\\abseil-cpp\\absl\\synchronization\\barrier.cc " +
+    "third_party\\abseil-cpp\\absl\\synchronization\\blocking_counter.cc " +
+    "third_party\\abseil-cpp\\absl\\synchronization\\internal\\create_thread_identity.cc " +
+    "third_party\\abseil-cpp\\absl\\synchronization\\internal\\graphcycles.cc " +
+    "third_party\\abseil-cpp\\absl\\synchronization\\internal\\per_thread_sem.cc " +
+    "third_party\\abseil-cpp\\absl\\synchronization\\internal\\waiter.cc " +
+    "third_party\\abseil-cpp\\absl\\synchronization\\mutex.cc " +
+    "third_party\\abseil-cpp\\absl\\synchronization\\notification.cc " +
     "third_party\\abseil-cpp\\absl\\time\\civil_time.cc " +
     "third_party\\abseil-cpp\\absl\\time\\clock.cc " +
     "third_party\\abseil-cpp\\absl\\time\\duration.cc " +
@@ -861,14 +811,34 @@ if (PHP_GRPC != "no") {
     "third_party\\boringssl-with-bazel\\src\\ssl\\tls13_server.cc " +
     "third_party\\boringssl-with-bazel\\src\\ssl\\tls_method.cc " +
     "third_party\\boringssl-with-bazel\\src\\ssl\\tls_record.cc " +
+    "third_party\\re2\\re2\\bitstate.cc " +
+    "third_party\\re2\\re2\\compile.cc " +
+    "third_party\\re2\\re2\\dfa.cc " +
+    "third_party\\re2\\re2\\filtered_re2.cc " +
+    "third_party\\re2\\re2\\mimics_pcre.cc " +
+    "third_party\\re2\\re2\\nfa.cc " +
+    "third_party\\re2\\re2\\onepass.cc " +
+    "third_party\\re2\\re2\\parse.cc " +
+    "third_party\\re2\\re2\\perl_groups.cc " +
+    "third_party\\re2\\re2\\prefilter.cc " +
+    "third_party\\re2\\re2\\prefilter_tree.cc " +
+    "third_party\\re2\\re2\\prog.cc " +
+    "third_party\\re2\\re2\\re2.cc " +
+    "third_party\\re2\\re2\\regexp.cc " +
+    "third_party\\re2\\re2\\set.cc " +
+    "third_party\\re2\\re2\\simplify.cc " +
+    "third_party\\re2\\re2\\stringpiece.cc " +
+    "third_party\\re2\\re2\\tostring.cc " +
+    "third_party\\re2\\re2\\unicode_casefold.cc " +
+    "third_party\\re2\\re2\\unicode_groups.cc " +
+    "third_party\\re2\\util\\pcre.cc " +
+    "third_party\\re2\\util\\rune.cc " +
+    "third_party\\re2\\util\\strutil.cc " +
     "third_party\\upb\\upb\\decode.c " +
-    "third_party\\upb\\upb\\def.c " +
     "third_party\\upb\\upb\\encode.c " +
     "third_party\\upb\\upb\\msg.c " +
     "third_party\\upb\\upb\\port.c " +
-    "third_party\\upb\\upb\\reflection.c " +
     "third_party\\upb\\upb\\table.c " +
-    "third_party\\upb\\upb\\text_encode.c " +
     "third_party\\upb\\upb\\upb.c " +
     "third_party\\zlib\\adler32.c " +
     "third_party\\zlib\\compress.c " +
@@ -948,36 +918,50 @@ if (PHP_GRPC != "no") {
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\annotations");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\auth");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\cluster");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\core");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\endpoint");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\listener");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\api\\v2\\route");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\accesslog");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\accesslog\\v2");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network\\http_connection_manager");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\filter\\network\\http_connection_manager\\v2");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\accesslog");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\accesslog\\v3");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\cluster");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\cluster\\v3");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\core");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\core\\v3");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\endpoint");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\endpoint\\v3");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\listener");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v2");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\listener\\v3");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\route");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\route\\v3");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\trace");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\trace\\v2");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\config\\trace\\v3");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\network");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\network\\http_connection_manager");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\filters\\network\\http_connection_manager\\v3");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\transport_sockets");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\transport_sockets\\tls");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\extensions\\transport_sockets\\tls\\v3");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\cluster");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\cluster\\v3");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\discovery");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v2");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\discovery\\v3");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\endpoint");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\endpoint\\v3");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\listener");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\listener\\v3");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\load_stats");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v2");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\load_stats\\v3");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\route");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\service\\route\\v3");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\matcher");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\matcher\\v3");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\metadata");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\metadata\\v2");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\metadata\\v3");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\tracing");
-  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\tracing\\v2");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\tracing\\v3");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\envoy\\type\\v3");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\gogoproto");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\google\\api");
@@ -1054,10 +1038,15 @@ if (PHP_GRPC != "no") {
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\base");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\base\\internal");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\debugging");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\debugging\\internal");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\numeric");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\status");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\strings");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\strings\\internal");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\strings\\internal\\str_format");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\synchronization");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\synchronization\\internal");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\time");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\time\\internal");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\time\\internal\\cctz");
@@ -1106,6 +1095,9 @@ if (PHP_GRPC != "no") {
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\x509");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\x509v3");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\ssl");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\re2");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\re2\\re2");
+  FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\re2\\util");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\upb");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\upb\\upb");
   FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\zlib");

+ 2 - 1
doc/g_stands_for.md

@@ -30,4 +30,5 @@
 - 1.28 'g' stands for ['galactic'](https://github.com/grpc/grpc/tree/v1.28.x)
 - 1.29 'g' stands for ['gringotts'](https://github.com/grpc/grpc/tree/v1.29.x)
 - 1.30 'g' stands for ['gradius'](https://github.com/grpc/grpc/tree/v1.30.x)
-- 1.31 'g' stands for ['galore'](https://github.com/grpc/grpc/tree/master)
+- 1.31 'g' stands for ['galore'](https://github.com/grpc/grpc/tree/v1.31.x)
+- 1.32 'g' stands for ['giggle'](https://github.com/grpc/grpc/tree/master)

+ 6 - 6
doc/grpc_release_schedule.md

@@ -24,9 +24,9 @@ v1.27.0 |Jan 14, 2020	|Jan 28, 2020
 v1.28.0 |Feb 25, 2020	|Mar 10, 2020
 v1.29.0 |Apr 7, 2020 |Apr 21, 2020
 v1.30.0 |May 19, 2020	|Jun 2, 2020
-v1.31.0 |Jun 30, 2020	|Jul 14, 2020
-v1.32.0 |Aug 11, 2020	|Aug 25, 2020
-v1.33.0 |Sept 22, 2020 |Oct 6, 2020
-v1.34.0 |Nov 3, 2020 |Nov 17, 2020
-v1.35.0 |Dec 15, 2020 |Dec 29, 2020
-v1.36.0 |Jan 26, 2021	|Feb 9, 2021
+v1.31.0 |Jul 14, 2020	|Jul 28, 2020
+v1.32.0 |Aug 25, 2020	|Sep 8, 2020
+v1.33.0 |Oct 6, 2020 |Oct 20, 2020
+v1.34.0 |Nov 17, 2020 |Dec 1, 2020
+v1.35.0 |Dec 29, 2020 |Jan 12, 2021
+v1.36.0 |Feb 9 26, 2021	|Feb 23, 2021

+ 3 - 2
doc/grpc_xds_features.md

@@ -36,5 +36,6 @@ to authenticate with the xDS server.
 
 Features | gRFCs  | [C++, Python,<br> Ruby, PHP, C#](https://github.com/grpc/grpc/releases) | [Java](https://github.com/grpc/grpc-java/releases) | [Go](https://github.com/grpc/grpc-go/releases)
 ---------|--------|--------------|------|------
-**xDS Infrastructure in gRPC client channel:**<br>LDS->RDS->CDS->EDS flow,<br>ADS stream, | [A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md) | v1.30.0  | v1.30.0 | v1.30.0 |
-**Load Balancing:**<br>Virtual host matching,<br>Only default path ("" or "/") matching,<br>Priority-based weighted round-robin locality picking,<br>Round-robin endpoint picking within locality,<br>Cluster route action,<br>Client-side Load reporting via [LRS](https://github.com/envoyproxy/data-plane-api/blob/master/envoy/service/load_stats/v2/lrs.proto)| [A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md) | v1.30.0  | v1.30.0 | v1.30.0 |
+**xDS Infrastructure in gRPC client channel:**<ul><li>LDS->RDS->CDS->EDS flow</li><li>ADS stream</li></ul> | [A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md) | v1.30.0  | v1.30.0 | v1.30.0 |
+**Load Balancing:**<ul><li>[Virtual host](https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/route/route_components.proto#route-virtualhost) domains matching</li><li>Only default path ("" or "/") matching</li><li>Priority-based weighted round-robin locality picking</li><li>Round-robin endpoint picking within locality</li><li>[Cluster](https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/route/route_components.proto#envoy-api-msg-route-routeaction) route action</li><li>Client-side Load reporting via [LRS](https://github.com/envoyproxy/data-plane-api/blob/master/envoy/service/load_stats/v2/lrs.proto)</li></ul> | [A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md) | v1.30.0  | v1.30.0 | v1.30.0 |
+Request matching based on:<ul><li>[Path](https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/route/route_components.proto#route-routematch) (prefix, full path and safe regex)</li><li>[Headers](https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/route/route_components.proto#route-headermatcher)</li></ul>Request routing to multiple clusters based on [weights](https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/route/route_components.proto#route-weightedcluster) | [A28](https://github.com/grpc/proposal/blob/master/A28-xds-traffic-splitting-and-routing.md) | v1.31.0 | v1.31.0 | v1.31.0 |

+ 1 - 0
doc/python/sphinx/grpc.rst

@@ -41,6 +41,7 @@ Create Client Credentials
 .. autofunction:: composite_call_credentials
 .. autofunction:: composite_channel_credentials
 .. autofunction:: local_channel_credentials(local_connect_type=grpc.LocalConnectionType.LOCAL_TCP)
+.. autofunction:: compute_engine_channel_credentials
 
 
 Create Server

+ 3 - 1
doc/xds-test-descriptions.md

@@ -27,7 +27,9 @@ Clients should accept these arguments:
 
 *   --fail_on_failed_rpcs=BOOL
     *   If true, the client should exit with a non-zero return code if any RPCs
-        fail. Default is false.
+        fail after at least one RPC has succeeded, indicating a valid xDS config
+        was received. This accounts for any startup-related delays in receiving
+        an initial config from the load balancer. Default is false.
 *   --num_channels=CHANNELS
     *   The number of channels to create to the server.
 *   --qps=QPS

+ 11 - 17
examples/README.md

@@ -1,27 +1,21 @@
 # Examples
 
-This directory contains code examples for all the C-based gRPC implementations: C++, Node.js, Python, Ruby, Objective-C, PHP, and C#. You can find examples and instructions specific to your
-favourite language in the relevant subdirectory.
-
-Examples for Go and Java gRPC live in their own repositories:
-
-* [Java](https://github.com/grpc/grpc-java/tree/master/examples)
-* [Android Java](https://github.com/grpc/grpc-java/tree/master/examples/android)
-* [Go](https://github.com/grpc/grpc-go/tree/master/examples)
-
-For more comprehensive documentation, including an [overview](https://grpc.io/docs/) and tutorials that use this example code, visit [grpc.io](https://grpc.io/docs/).
-
-## Quick start
-
-Each example directory has quick start instructions for the appropriate language, including installation instructions and how to run our simplest Hello World example:
+This directory contains examples for all the C-based gRPC implementations. Each
+language subdirectory contains a Hello World example and more:
 
+* [C#](csharp)
 * [C++](cpp)
-* [Ruby](ruby)
 * [Node.js](node)
-* [Python](python/helloworld)
-* [C#](csharp)
 * [Objective-C](objective-c/helloworld)
 * [PHP](php)
+* [Python](python/helloworld)
+* [Ruby](ruby)
 
+For a complete list of supported languages, see [Supported languages and
+platforms][lang].
 
+For comprehensive documentation, including an [Introduction to gRPC][intro] and
+tutorials that use this example code, visit [grpc.io](https://grpc.io).
 
+[intro]: https://grpc.io/docs/what-is-grpc/introduction
+[lang]: https://grpc.io/docs/languages/

+ 105 - 253
gRPC-C++.podspec

@@ -22,7 +22,7 @@
 Pod::Spec.new do |s|
   s.name     = 'gRPC-C++'
   # TODO (mxyan): use version that match gRPC version when pod is stabilized
-  version = '1.31.0-dev'
+  version = '1.32.0-dev'
   s.version  = version
   s.summary  = 'gRPC C++ library'
   s.homepage = 'https://grpc.io'
@@ -84,12 +84,10 @@ Pod::Spec.new do |s|
                       'include/grpcpp/completion_queue.h',
                       'include/grpcpp/completion_queue_impl.h',
                       'include/grpcpp/create_channel.h',
-                      'include/grpcpp/create_channel_impl.h',
                       'include/grpcpp/create_channel_posix.h',
                       'include/grpcpp/ext/health_check_service_server_builder_option.h',
                       'include/grpcpp/generic/async_generic_service.h',
                       'include/grpcpp/generic/generic_stub.h',
-                      'include/grpcpp/generic/generic_stub_impl.h',
                       'include/grpcpp/grpcpp.h',
                       'include/grpcpp/health_check_service_interface.h',
                       'include/grpcpp/impl/call.h',
@@ -164,11 +162,8 @@ Pod::Spec.new do |s|
                       'include/grpcpp/resource_quota.h',
                       'include/grpcpp/security/auth_context.h',
                       'include/grpcpp/security/auth_metadata_processor.h',
-                      'include/grpcpp/security/auth_metadata_processor_impl.h',
                       'include/grpcpp/security/credentials.h',
-                      'include/grpcpp/security/credentials_impl.h',
                       'include/grpcpp/security/server_credentials.h',
-                      'include/grpcpp/security/server_credentials_impl.h',
                       'include/grpcpp/security/tls_credentials_options.h',
                       'include/grpcpp/server.h',
                       'include/grpcpp/server_builder.h',
@@ -210,10 +205,13 @@ Pod::Spec.new do |s|
     ss.dependency "#{s.name}/Interface", version
     ss.dependency 'gRPC-Core', version
     abseil_version = '1.20200225.0'
+    ss.dependency 'abseil/base/base', abseil_version
     ss.dependency 'abseil/container/inlined_vector', abseil_version
     ss.dependency 'abseil/memory/memory', abseil_version
+    ss.dependency 'abseil/status/status', abseil_version
     ss.dependency 'abseil/strings/str_format', abseil_version
     ss.dependency 'abseil/strings/strings', abseil_version
+    ss.dependency 'abseil/synchronization/synchronization', abseil_version
     ss.dependency 'abseil/time/time', abseil_version
     ss.dependency 'abseil/types/optional', abseil_version
 
@@ -305,145 +303,77 @@ Pod::Spec.new do |s|
                       'src/core/ext/transport/chttp2/transport/varint.h',
                       'src/core/ext/transport/inproc/inproc_transport.h',
                       'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h',
-                      'src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.h',
                       'src/core/ext/upb-generated/envoy/annotations/resource.upb.h',
-                      'src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h',
-                      'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h',
-                      'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h',
-                      'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h',
-                      'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
-                      'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
-                      'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/http.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/http.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/percent.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/percent.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/range.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/range.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/semantic_version.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.h',
+                      'src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h',
+                      'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/v3/http.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/v3/percent.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/v3/range.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h',
                       'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
-                      'src/core/ext/upb-generated/gogoproto/gogo.upbdefs.h',
                       'src/core/ext/upb-generated/google/api/annotations.upb.h',
-                      'src/core/ext/upb-generated/google/api/annotations.upbdefs.h',
                       'src/core/ext/upb-generated/google/api/http.upb.h',
-                      'src/core/ext/upb-generated/google/api/http.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/any.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/any.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/duration.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/duration.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/empty.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/empty.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/struct.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/struct.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.h',
                       'src/core/ext/upb-generated/google/rpc/status.upb.h',
-                      'src/core/ext/upb-generated/google/rpc/status.upbdefs.h',
                       'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h',
                       'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h',
                       'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h',
                       'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h',
                       'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h',
                       'src/core/ext/upb-generated/udpa/annotations/migrate.upb.h',
-                      'src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.h',
                       'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h',
-                      'src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.h',
                       'src/core/ext/upb-generated/udpa/annotations/status.upb.h',
-                      'src/core/ext/upb-generated/udpa/annotations/status.upbdefs.h',
+                      'src/core/ext/upb-generated/udpa/annotations/versioning.upb.h',
                       'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h',
                       'src/core/ext/upb-generated/validate/validate.upb.h',
-                      'src/core/ext/upb-generated/validate/validate.upbdefs.h',
                       'src/core/lib/avl/avl.h',
                       'src/core/lib/backoff/backoff.h',
                       'src/core/lib/channel/channel_args.h',
@@ -613,16 +543,13 @@ Pod::Spec.new do |s|
                       'src/core/lib/security/transport/auth_filters.h',
                       'src/core/lib/security/transport/secure_endpoint.h',
                       'src/core/lib/security/transport/security_handshaker.h',
-                      'src/core/lib/security/transport/target_authority_table.h',
                       'src/core/lib/security/transport/tsi_error.h',
                       'src/core/lib/security/util/json_util.h',
                       'src/core/lib/slice/b64.h',
                       'src/core/lib/slice/percent_encoding.h',
-                      'src/core/lib/slice/slice_hash_table.h',
                       'src/core/lib/slice/slice_internal.h',
                       'src/core/lib/slice/slice_string_helpers.h',
                       'src/core/lib/slice/slice_utils.h',
-                      'src/core/lib/slice/slice_weak_hash_table.h',
                       'src/core/lib/surface/api_trace.h',
                       'src/core/lib/surface/call.h',
                       'src/core/lib/surface/call_test_only.h',
@@ -636,6 +563,7 @@ Pod::Spec.new do |s|
                       'src/core/lib/surface/lame_client.h',
                       'src/core/lib/surface/server.h',
                       'src/core/lib/surface/validate_metadata.h',
+                      'src/core/lib/transport/authority_override.h',
                       'src/core/lib/transport/bdp_estimator.h',
                       'src/core/lib/transport/byte_stream.h',
                       'src/core/lib/transport/connectivity_state.h',
@@ -763,14 +691,11 @@ Pod::Spec.new do |s|
                       'third_party/re2/util/utf.h',
                       'third_party/re2/util/util.h',
                       'third_party/upb/upb/decode.h',
-                      'third_party/upb/upb/def.h',
                       'third_party/upb/upb/encode.h',
                       'third_party/upb/upb/msg.h',
                       'third_party/upb/upb/port_def.inc',
                       'third_party/upb/upb/port_undef.inc',
-                      'third_party/upb/upb/reflection.h',
                       'third_party/upb/upb/table.int.h',
-                      'third_party/upb/upb/text_encode.h',
                       'third_party/upb/upb/upb.h',
                       'third_party/upb/upb/upb.hpp'
 
@@ -862,145 +787,77 @@ Pod::Spec.new do |s|
                               'src/core/ext/transport/chttp2/transport/varint.h',
                               'src/core/ext/transport/inproc/inproc_transport.h',
                               'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h',
-                              'src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.h',
                               'src/core/ext/upb-generated/envoy/annotations/resource.upb.h',
-                              'src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h',
-                              'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h',
-                              'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h',
-                              'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h',
-                              'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
-                              'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
-                              'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/http.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/http.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/percent.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/percent.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/range.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/range.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/semantic_version.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.h',
+                              'src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h',
+                              'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h',
+                              'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h',
+                              'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h',
+                              'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h',
+                              'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/v3/http.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/v3/percent.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/v3/range.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h',
                               'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
-                              'src/core/ext/upb-generated/gogoproto/gogo.upbdefs.h',
                               'src/core/ext/upb-generated/google/api/annotations.upb.h',
-                              'src/core/ext/upb-generated/google/api/annotations.upbdefs.h',
                               'src/core/ext/upb-generated/google/api/http.upb.h',
-                              'src/core/ext/upb-generated/google/api/http.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/any.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/any.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/duration.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/duration.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/empty.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/empty.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/struct.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/struct.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.h',
                               'src/core/ext/upb-generated/google/rpc/status.upb.h',
-                              'src/core/ext/upb-generated/google/rpc/status.upbdefs.h',
                               'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h',
                               'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h',
                               'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h',
                               'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h',
                               'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h',
                               'src/core/ext/upb-generated/udpa/annotations/migrate.upb.h',
-                              'src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.h',
                               'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h',
-                              'src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.h',
                               'src/core/ext/upb-generated/udpa/annotations/status.upb.h',
-                              'src/core/ext/upb-generated/udpa/annotations/status.upbdefs.h',
+                              'src/core/ext/upb-generated/udpa/annotations/versioning.upb.h',
                               'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h',
                               'src/core/ext/upb-generated/validate/validate.upb.h',
-                              'src/core/ext/upb-generated/validate/validate.upbdefs.h',
                               'src/core/lib/avl/avl.h',
                               'src/core/lib/backoff/backoff.h',
                               'src/core/lib/channel/channel_args.h',
@@ -1170,16 +1027,13 @@ Pod::Spec.new do |s|
                               'src/core/lib/security/transport/auth_filters.h',
                               'src/core/lib/security/transport/secure_endpoint.h',
                               'src/core/lib/security/transport/security_handshaker.h',
-                              'src/core/lib/security/transport/target_authority_table.h',
                               'src/core/lib/security/transport/tsi_error.h',
                               'src/core/lib/security/util/json_util.h',
                               'src/core/lib/slice/b64.h',
                               'src/core/lib/slice/percent_encoding.h',
-                              'src/core/lib/slice/slice_hash_table.h',
                               'src/core/lib/slice/slice_internal.h',
                               'src/core/lib/slice/slice_string_helpers.h',
                               'src/core/lib/slice/slice_utils.h',
-                              'src/core/lib/slice/slice_weak_hash_table.h',
                               'src/core/lib/surface/api_trace.h',
                               'src/core/lib/surface/call.h',
                               'src/core/lib/surface/call_test_only.h',
@@ -1193,6 +1047,7 @@ Pod::Spec.new do |s|
                               'src/core/lib/surface/lame_client.h',
                               'src/core/lib/surface/server.h',
                               'src/core/lib/surface/validate_metadata.h',
+                              'src/core/lib/transport/authority_override.h',
                               'src/core/lib/transport/bdp_estimator.h',
                               'src/core/lib/transport/byte_stream.h',
                               'src/core/lib/transport/connectivity_state.h',
@@ -1273,14 +1128,11 @@ Pod::Spec.new do |s|
                               'third_party/re2/util/utf.h',
                               'third_party/re2/util/util.h',
                               'third_party/upb/upb/decode.h',
-                              'third_party/upb/upb/def.h',
                               'third_party/upb/upb/encode.h',
                               'third_party/upb/upb/msg.h',
                               'third_party/upb/upb/port_def.inc',
                               'third_party/upb/upb/port_undef.inc',
-                              'third_party/upb/upb/reflection.h',
                               'third_party/upb/upb/table.int.h',
-                              'third_party/upb/upb/text_encode.h',
                               'third_party/upb/upb/upb.h',
                               'third_party/upb/upb/upb.hpp'
   end
@@ -1315,7 +1167,7 @@ Pod::Spec.new do |s|
 
   s.prepare_command = <<-END_OF_COMMAND
     sed -E -i '' 's;#include <openssl/(.*)>;#if COCOAPODS==1\\\n  #include <openssl_grpc/\\1>\\\n#else\\\n  #include <openssl/\\1>\\\n#endif;g' $(find src/core -type f \\( -path '*.h' -or -path '*.cc' \\) -print | xargs grep -H -c '#include <openssl_grpc/' | grep 0$ | cut -d':' -f1)
-    find src/core/ src/cpp/ third_party/upb/ -type f \\( -name '*.h' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "upb/(.*)";#if COCOAPODS==1\\\n  #include  "third_party/upb/upb/\\1"\\\n#else\\\n  #include  "upb/\\1"\\\n#endif;g'
+    find src/core/ src/cpp/ third_party/upb/ -type f \\( -name '*.h' -or -name '*.hpp' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "upb/(.*)";#if COCOAPODS==1\\\n  #include  "third_party/upb/upb/\\1"\\\n#else\\\n  #include  "upb/\\1"\\\n#endif;g'
     find src/core/ src/cpp/ third_party/upb/ -type f -name '*.grpc_back' -print0 | xargs -0 rm
     find src/core/ src/cpp/ -type f \\( -name '*.h' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "(.*).upb.h";#if COCOAPODS==1\\\n  #include  "src/core/ext/upb-generated/\\1.upb.h"\\\n#else\\\n  #include  "\\1.upb.h"\\\n#endif;g'
     find src/core/ src/cpp/ -type f -name '*.grpc_back' -print0 | xargs -0 rm

+ 157 - 372
gRPC-Core.podspec

@@ -21,7 +21,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-Core'
-  version = '1.31.0-dev'
+  version = '1.32.0-dev'
   s.version  = version
   s.summary  = 'Core cross-platform gRPC library, written in C'
   s.homepage = 'https://grpc.io'
@@ -172,12 +172,15 @@ Pod::Spec.new do |s|
     ss.header_mappings_dir = '.'
     ss.libraries = 'z'
     ss.dependency "#{s.name}/Interface", version
-    ss.dependency 'BoringSSL-GRPC', '0.0.9'
+    ss.dependency 'BoringSSL-GRPC', '0.0.11'
     abseil_version = '1.20200225.0'
+    ss.dependency 'abseil/base/base', abseil_version
     ss.dependency 'abseil/container/inlined_vector', abseil_version
     ss.dependency 'abseil/memory/memory', abseil_version
+    ss.dependency 'abseil/status/status', abseil_version
     ss.dependency 'abseil/strings/str_format', abseil_version
     ss.dependency 'abseil/strings/strings', abseil_version
+    ss.dependency 'abseil/synchronization/synchronization', abseil_version
     ss.dependency 'abseil/time/time', abseil_version
     ss.dependency 'abseil/types/optional', abseil_version
     ss.compiler_flags = '-DBORINGSSL_PREFIX=GRPC -Wno-unreachable-code -Wno-shorten-64-to-32'
@@ -383,256 +386,126 @@ Pod::Spec.new do |s|
                       'src/core/ext/transport/inproc/inproc_transport.h',
                       'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c',
                       'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h',
-                      'src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.h',
                       'src/core/ext/upb-generated/envoy/annotations/resource.upb.c',
                       'src/core/ext/upb-generated/envoy/annotations/resource.upb.h',
-                      'src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cds.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/eds.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/lds.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/rds.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/route.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/srds.upb.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h',
-                      'src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c',
-                      'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h',
-                      'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c',
-                      'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h',
-                      'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c',
-                      'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h',
-                      'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c',
-                      'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h',
-                      'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c',
-                      'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
-                      'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c',
-                      'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
-                      'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/http.upb.c',
-                      'src/core/ext/upb-generated/envoy/type/http.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/http.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/type/http.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c',
-                      'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/matcher/string.upb.c',
-                      'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c',
-                      'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/percent.upb.c',
-                      'src/core/ext/upb-generated/envoy/type/percent.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/percent.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/type/percent.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/range.upb.c',
-                      'src/core/ext/upb-generated/envoy/type/range.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/range.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/type/range.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/semantic_version.upb.c',
-                      'src/core/ext/upb-generated/envoy/type/semantic_version.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.h',
-                      'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c',
-                      'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h',
-                      'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c',
-                      'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.h',
+                      'src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h',
+                      'src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c',
+                      'src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h',
+                      'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c',
+                      'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c',
+                      'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c',
+                      'src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c',
+                      'src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c',
+                      'src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c',
+                      'src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c',
+                      'src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c',
+                      'src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c',
+                      'src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h',
+                      'src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c',
+                      'src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c',
+                      'src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c',
+                      'src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c',
+                      'src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c',
+                      'src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/v3/http.upb.c',
+                      'src/core/ext/upb-generated/envoy/type/v3/http.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/v3/percent.upb.c',
+                      'src/core/ext/upb-generated/envoy/type/v3/percent.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/v3/range.upb.c',
+                      'src/core/ext/upb-generated/envoy/type/v3/range.upb.h',
+                      'src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c',
+                      'src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h',
                       'src/core/ext/upb-generated/gogoproto/gogo.upb.c',
                       'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
-                      'src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c',
-                      'src/core/ext/upb-generated/gogoproto/gogo.upbdefs.h',
                       'src/core/ext/upb-generated/google/api/annotations.upb.c',
                       'src/core/ext/upb-generated/google/api/annotations.upb.h',
-                      'src/core/ext/upb-generated/google/api/annotations.upbdefs.c',
-                      'src/core/ext/upb-generated/google/api/annotations.upbdefs.h',
                       'src/core/ext/upb-generated/google/api/http.upb.c',
                       'src/core/ext/upb-generated/google/api/http.upb.h',
-                      'src/core/ext/upb-generated/google/api/http.upbdefs.c',
-                      'src/core/ext/upb-generated/google/api/http.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/any.upb.c',
                       'src/core/ext/upb-generated/google/protobuf/any.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/any.upbdefs.c',
-                      'src/core/ext/upb-generated/google/protobuf/any.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/descriptor.upb.c',
                       'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c',
-                      'src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/duration.upb.c',
                       'src/core/ext/upb-generated/google/protobuf/duration.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c',
-                      'src/core/ext/upb-generated/google/protobuf/duration.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/empty.upb.c',
                       'src/core/ext/upb-generated/google/protobuf/empty.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c',
-                      'src/core/ext/upb-generated/google/protobuf/empty.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/struct.upb.c',
                       'src/core/ext/upb-generated/google/protobuf/struct.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c',
-                      'src/core/ext/upb-generated/google/protobuf/struct.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/timestamp.upb.c',
                       'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c',
-                      'src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.h',
                       'src/core/ext/upb-generated/google/protobuf/wrappers.upb.c',
                       'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h',
-                      'src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c',
-                      'src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.h',
                       'src/core/ext/upb-generated/google/rpc/status.upb.c',
                       'src/core/ext/upb-generated/google/rpc/status.upb.h',
-                      'src/core/ext/upb-generated/google/rpc/status.upbdefs.c',
-                      'src/core/ext/upb-generated/google/rpc/status.upbdefs.h',
                       'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c',
                       'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h',
                       'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c',
@@ -645,22 +518,16 @@ Pod::Spec.new do |s|
                       'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h',
                       'src/core/ext/upb-generated/udpa/annotations/migrate.upb.c',
                       'src/core/ext/upb-generated/udpa/annotations/migrate.upb.h',
-                      'src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c',
-                      'src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.h',
                       'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c',
                       'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h',
-                      'src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c',
-                      'src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.h',
                       'src/core/ext/upb-generated/udpa/annotations/status.upb.c',
                       'src/core/ext/upb-generated/udpa/annotations/status.upb.h',
-                      'src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c',
-                      'src/core/ext/upb-generated/udpa/annotations/status.upbdefs.h',
+                      'src/core/ext/upb-generated/udpa/annotations/versioning.upb.c',
+                      'src/core/ext/upb-generated/udpa/annotations/versioning.upb.h',
                       'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c',
                       'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h',
                       'src/core/ext/upb-generated/validate/validate.upb.c',
                       'src/core/ext/upb-generated/validate/validate.upb.h',
-                      'src/core/ext/upb-generated/validate/validate.upbdefs.c',
-                      'src/core/ext/upb-generated/validate/validate.upbdefs.h',
                       'src/core/lib/avl/avl.cc',
                       'src/core/lib/avl/avl.h',
                       'src/core/lib/backoff/backoff.cc',
@@ -1033,8 +900,6 @@ Pod::Spec.new do |s|
                       'src/core/lib/security/transport/security_handshaker.cc',
                       'src/core/lib/security/transport/security_handshaker.h',
                       'src/core/lib/security/transport/server_auth_filter.cc',
-                      'src/core/lib/security/transport/target_authority_table.cc',
-                      'src/core/lib/security/transport/target_authority_table.h',
                       'src/core/lib/security/transport/tsi_error.cc',
                       'src/core/lib/security/transport/tsi_error.h',
                       'src/core/lib/security/util/json_util.cc',
@@ -1045,13 +910,11 @@ Pod::Spec.new do |s|
                       'src/core/lib/slice/percent_encoding.h',
                       'src/core/lib/slice/slice.cc',
                       'src/core/lib/slice/slice_buffer.cc',
-                      'src/core/lib/slice/slice_hash_table.h',
                       'src/core/lib/slice/slice_intern.cc',
                       'src/core/lib/slice/slice_internal.h',
                       'src/core/lib/slice/slice_string_helpers.cc',
                       'src/core/lib/slice/slice_string_helpers.h',
                       'src/core/lib/slice/slice_utils.h',
-                      'src/core/lib/slice/slice_weak_hash_table.h',
                       'src/core/lib/surface/api_trace.cc',
                       'src/core/lib/surface/api_trace.h',
                       'src/core/lib/surface/byte_buffer.cc',
@@ -1085,6 +948,8 @@ Pod::Spec.new do |s|
                       'src/core/lib/surface/validate_metadata.cc',
                       'src/core/lib/surface/validate_metadata.h',
                       'src/core/lib/surface/version.cc',
+                      'src/core/lib/transport/authority_override.cc',
+                      'src/core/lib/transport/authority_override.h',
                       'src/core/lib/transport/bdp_estimator.cc',
                       'src/core/lib/transport/bdp_estimator.h',
                       'src/core/lib/transport/byte_stream.cc',
@@ -1220,8 +1085,6 @@ Pod::Spec.new do |s|
                       'third_party/re2/util/util.h',
                       'third_party/upb/upb/decode.c',
                       'third_party/upb/upb/decode.h',
-                      'third_party/upb/upb/def.c',
-                      'third_party/upb/upb/def.h',
                       'third_party/upb/upb/encode.c',
                       'third_party/upb/upb/encode.h',
                       'third_party/upb/upb/msg.c',
@@ -1229,12 +1092,8 @@ Pod::Spec.new do |s|
                       'third_party/upb/upb/port.c',
                       'third_party/upb/upb/port_def.inc',
                       'third_party/upb/upb/port_undef.inc',
-                      'third_party/upb/upb/reflection.c',
-                      'third_party/upb/upb/reflection.h',
                       'third_party/upb/upb/table.c',
                       'third_party/upb/upb/table.int.h',
-                      'third_party/upb/upb/text_encode.c',
-                      'third_party/upb/upb/text_encode.h',
                       'third_party/upb/upb/upb.c',
                       'third_party/upb/upb/upb.h',
                       'third_party/upb/upb/upb.hpp'
@@ -1326,145 +1185,77 @@ Pod::Spec.new do |s|
                               'src/core/ext/transport/chttp2/transport/varint.h',
                               'src/core/ext/transport/inproc/inproc_transport.h',
                               'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h',
-                              'src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.h',
                               'src/core/ext/upb-generated/envoy/annotations/resource.upb.h',
-                              'src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cds.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/eds.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/lds.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/rds.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/srds.upb.h',
-                              'src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h',
-                              'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h',
-                              'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h',
-                              'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h',
-                              'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h',
-                              'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h',
-                              'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/http.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/http.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/matcher/string.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/percent.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/percent.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/range.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/range.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/semantic_version.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.h',
-                              'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h',
-                              'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.h',
+                              'src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h',
+                              'src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h',
+                              'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h',
+                              'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h',
+                              'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h',
+                              'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h',
+                              'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h',
+                              'src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/v3/http.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/v3/percent.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/v3/range.upb.h',
+                              'src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h',
                               'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
-                              'src/core/ext/upb-generated/gogoproto/gogo.upbdefs.h',
                               'src/core/ext/upb-generated/google/api/annotations.upb.h',
-                              'src/core/ext/upb-generated/google/api/annotations.upbdefs.h',
                               'src/core/ext/upb-generated/google/api/http.upb.h',
-                              'src/core/ext/upb-generated/google/api/http.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/any.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/any.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/duration.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/duration.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/empty.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/empty.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/struct.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/struct.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.h',
                               'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h',
-                              'src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.h',
                               'src/core/ext/upb-generated/google/rpc/status.upb.h',
-                              'src/core/ext/upb-generated/google/rpc/status.upbdefs.h',
                               'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h',
                               'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h',
                               'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h',
                               'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h',
                               'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h',
                               'src/core/ext/upb-generated/udpa/annotations/migrate.upb.h',
-                              'src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.h',
                               'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h',
-                              'src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.h',
                               'src/core/ext/upb-generated/udpa/annotations/status.upb.h',
-                              'src/core/ext/upb-generated/udpa/annotations/status.upbdefs.h',
+                              'src/core/ext/upb-generated/udpa/annotations/versioning.upb.h',
                               'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h',
                               'src/core/ext/upb-generated/validate/validate.upb.h',
-                              'src/core/ext/upb-generated/validate/validate.upbdefs.h',
                               'src/core/lib/avl/avl.h',
                               'src/core/lib/backoff/backoff.h',
                               'src/core/lib/channel/channel_args.h',
@@ -1634,16 +1425,13 @@ Pod::Spec.new do |s|
                               'src/core/lib/security/transport/auth_filters.h',
                               'src/core/lib/security/transport/secure_endpoint.h',
                               'src/core/lib/security/transport/security_handshaker.h',
-                              'src/core/lib/security/transport/target_authority_table.h',
                               'src/core/lib/security/transport/tsi_error.h',
                               'src/core/lib/security/util/json_util.h',
                               'src/core/lib/slice/b64.h',
                               'src/core/lib/slice/percent_encoding.h',
-                              'src/core/lib/slice/slice_hash_table.h',
                               'src/core/lib/slice/slice_internal.h',
                               'src/core/lib/slice/slice_string_helpers.h',
                               'src/core/lib/slice/slice_utils.h',
-                              'src/core/lib/slice/slice_weak_hash_table.h',
                               'src/core/lib/surface/api_trace.h',
                               'src/core/lib/surface/call.h',
                               'src/core/lib/surface/call_test_only.h',
@@ -1657,6 +1445,7 @@ Pod::Spec.new do |s|
                               'src/core/lib/surface/lame_client.h',
                               'src/core/lib/surface/server.h',
                               'src/core/lib/surface/validate_metadata.h',
+                              'src/core/lib/transport/authority_override.h',
                               'src/core/lib/transport/bdp_estimator.h',
                               'src/core/lib/transport/byte_stream.h',
                               'src/core/lib/transport/connectivity_state.h',
@@ -1726,14 +1515,11 @@ Pod::Spec.new do |s|
                               'third_party/re2/util/utf.h',
                               'third_party/re2/util/util.h',
                               'third_party/upb/upb/decode.h',
-                              'third_party/upb/upb/def.h',
                               'third_party/upb/upb/encode.h',
                               'third_party/upb/upb/msg.h',
                               'third_party/upb/upb/port_def.inc',
                               'third_party/upb/upb/port_undef.inc',
-                              'third_party/upb/upb/reflection.h',
                               'third_party/upb/upb/table.int.h',
-                              'third_party/upb/upb/text_encode.h',
                               'third_party/upb/upb/upb.h',
                               'third_party/upb/upb/upb.hpp'
   end
@@ -1908,9 +1694,8 @@ Pod::Spec.new do |s|
     sed -E -i '' 's;#include <openssl/(.*)>;#if COCOAPODS==1\\\n  #include <openssl_grpc/\\1>\\\n#else\\\n  #include <openssl/\\1>\\\n#endif;g' $(find src/core -type f \\( -path '*.h' -or -path '*.cc' \\) -print | xargs grep -H -c '#include <openssl_grpc/' | grep 0$ | cut -d':' -f1)
     find src/core/ src/cpp/ third_party/upb/ -type f \\( -name '*.h' -or -name '*.hpp' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "upb/(.*)";#if COCOAPODS==1\\\n  #include  "third_party/upb/upb/\\1"\\\n#else\\\n  #include  "upb/\\1"\\\n#endif;g'
     find src/core/ src/cpp/ third_party/upb/ -type f -name '*.grpc_back' -print0 | xargs -0 rm
-    find src/core/ src/cpp/ third_party/upb/ -type f \\( -name '*.h' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "(.*).upb.h";#if COCOAPODS==1\\\n  #include  "src/core/ext/upb-generated/\\1.upb.h"\\\n#else\\\n  #include  "\\1.upb.h"\\\n#endif;g'
-    find src/core/ src/cpp/ third_party/upb/ -type f \\( -name '*.h' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "(.*).upbdefs.h";#if COCOAPODS==1\\\n  #include  "src/core/ext/upb-generated/\\1.upbdefs.h"\\\n#else\\\n  #include  "\\1.upbdefs.h"\\\n#endif;g'
-    find src/core/ src/cpp/ third_party/upb/ -type f -name '*.grpc_back' -print0 | xargs -0 rm
+    find src/core/ src/cpp/ -type f \\( -name '*.h' -or -name '*.c' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "(.*).upb.h";#if COCOAPODS==1\\\n  #include  "src/core/ext/upb-generated/\\1.upb.h"\\\n#else\\\n  #include  "\\1.upb.h"\\\n#endif;g'
+    find src/core/ src/cpp/ -type f -name '*.grpc_back' -print0 | xargs -0 rm
     find third_party/re2/re2/ third_party/re2/util/ -type f \\( -name '*.h' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "re2/(.*)";#if COCOAPODS==1\\\n  #include  "third_party/re2/re2/\\1"\\\n#else\\\n  #include  "re2/\\1"\\\n#endif;g;s;#include "util/(.*)";#if COCOAPODS==1\\\n  #include  "third_party/re2/util/\\1"\\\n#else\\\n  #include  "util/\\1"\\\n#endif;g'
     find src/core/ -type f \\( -name '*.h' -or -name '*.cc' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include "re2/(.*)";#if COCOAPODS==1\\\n  #include  "third_party/re2/re2/\\1"\\\n#else\\\n  #include  "re2/\\1"\\\n#endif;g'
     find src/core/ third_party/re2/ -type f -name '*.grpc_back' -print0 | xargs -0 rm

+ 1 - 1
gRPC-ProtoRPC.podspec

@@ -21,7 +21,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-ProtoRPC'
-  version = '1.31.0-dev'
+  version = '1.32.0-dev'
   s.version  = version
   s.summary  = 'RPC library for Protocol Buffers, based on gRPC'
   s.homepage = 'https://grpc.io'

+ 1 - 1
gRPC-RxLibrary.podspec

@@ -21,7 +21,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-RxLibrary'
-  version = '1.31.0-dev'
+  version = '1.32.0-dev'
   s.version  = version
   s.summary  = 'Reactive Extensions library for iOS/OSX.'
   s.homepage = 'https://grpc.io'

+ 1 - 1
gRPC.podspec

@@ -20,7 +20,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC'
-  version = '1.31.0-dev'
+  version = '1.32.0-dev'
   s.version  = version
   s.summary  = 'gRPC client library for iOS/OSX'
   s.homepage = 'https://grpc.io'

+ 1 - 1
grpc.def

@@ -97,12 +97,12 @@ EXPORTS
     grpc_ssl_session_cache_create_lru
     grpc_ssl_session_cache_destroy
     grpc_ssl_session_cache_create_channel_arg
+    grpc_call_credentials_release
     grpc_channel_credentials_release
     grpc_google_default_credentials_create
     grpc_set_ssl_roots_override_callback
     grpc_ssl_credentials_create
     grpc_ssl_credentials_create_ex
-    grpc_call_credentials_release
     grpc_composite_channel_credentials_create
     grpc_composite_call_credentials_create
     grpc_google_compute_engine_credentials_create

+ 204 - 244
grpc.gemspec

@@ -305,256 +305,126 @@ Gem::Specification.new do |s|
   s.files += %w( src/core/ext/transport/inproc/inproc_transport.h )
   s.files += %w( src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c )
   s.files += %w( src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/envoy/annotations/resource.upb.c )
   s.files += %w( src/core/ext/upb-generated/envoy/annotations/resource.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cds.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cds.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/eds.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/eds.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/lds.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/lds.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/rds.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/rds.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/srds.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/srds.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/http.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/http.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/http.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/http.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/string.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/string.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/percent.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/percent.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/percent.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/percent.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/range.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/range.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/range.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/range.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/semantic_version.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/semantic_version.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/v3/http.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/v3/http.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/v3/percent.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/v3/percent.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/v3/range.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/v3/range.upb.h )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c )
+  s.files += %w( src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h )
   s.files += %w( src/core/ext/upb-generated/gogoproto/gogo.upb.c )
   s.files += %w( src/core/ext/upb-generated/gogoproto/gogo.upb.h )
-  s.files += %w( src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/gogoproto/gogo.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/google/api/annotations.upb.c )
   s.files += %w( src/core/ext/upb-generated/google/api/annotations.upb.h )
-  s.files += %w( src/core/ext/upb-generated/google/api/annotations.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/google/api/annotations.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/google/api/http.upb.c )
   s.files += %w( src/core/ext/upb-generated/google/api/http.upb.h )
-  s.files += %w( src/core/ext/upb-generated/google/api/http.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/google/api/http.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/any.upb.c )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/any.upb.h )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/any.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/any.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/descriptor.upb.c )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/descriptor.upb.h )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/duration.upb.c )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/duration.upb.h )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/duration.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/empty.upb.c )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/empty.upb.h )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/empty.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/struct.upb.c )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/struct.upb.h )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/struct.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/timestamp.upb.c )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/timestamp.upb.h )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/wrappers.upb.c )
   s.files += %w( src/core/ext/upb-generated/google/protobuf/wrappers.upb.h )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/google/rpc/status.upb.c )
   s.files += %w( src/core/ext/upb-generated/google/rpc/status.upb.h )
-  s.files += %w( src/core/ext/upb-generated/google/rpc/status.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/google/rpc/status.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c )
   s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h )
   s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c )
@@ -567,22 +437,16 @@ Gem::Specification.new do |s|
   s.files += %w( src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h )
   s.files += %w( src/core/ext/upb-generated/udpa/annotations/migrate.upb.c )
   s.files += %w( src/core/ext/upb-generated/udpa/annotations/migrate.upb.h )
-  s.files += %w( src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c )
   s.files += %w( src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h )
-  s.files += %w( src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.h )
   s.files += %w( src/core/ext/upb-generated/udpa/annotations/status.upb.c )
   s.files += %w( src/core/ext/upb-generated/udpa/annotations/status.upb.h )
-  s.files += %w( src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/udpa/annotations/status.upbdefs.h )
+  s.files += %w( src/core/ext/upb-generated/udpa/annotations/versioning.upb.c )
+  s.files += %w( src/core/ext/upb-generated/udpa/annotations/versioning.upb.h )
   s.files += %w( src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c )
   s.files += %w( src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h )
   s.files += %w( src/core/ext/upb-generated/validate/validate.upb.c )
   s.files += %w( src/core/ext/upb-generated/validate/validate.upb.h )
-  s.files += %w( src/core/ext/upb-generated/validate/validate.upbdefs.c )
-  s.files += %w( src/core/ext/upb-generated/validate/validate.upbdefs.h )
   s.files += %w( src/core/lib/avl/avl.cc )
   s.files += %w( src/core/lib/avl/avl.h )
   s.files += %w( src/core/lib/backoff/backoff.cc )
@@ -955,8 +819,6 @@ Gem::Specification.new do |s|
   s.files += %w( src/core/lib/security/transport/security_handshaker.cc )
   s.files += %w( src/core/lib/security/transport/security_handshaker.h )
   s.files += %w( src/core/lib/security/transport/server_auth_filter.cc )
-  s.files += %w( src/core/lib/security/transport/target_authority_table.cc )
-  s.files += %w( src/core/lib/security/transport/target_authority_table.h )
   s.files += %w( src/core/lib/security/transport/tsi_error.cc )
   s.files += %w( src/core/lib/security/transport/tsi_error.h )
   s.files += %w( src/core/lib/security/util/json_util.cc )
@@ -967,13 +829,11 @@ Gem::Specification.new do |s|
   s.files += %w( src/core/lib/slice/percent_encoding.h )
   s.files += %w( src/core/lib/slice/slice.cc )
   s.files += %w( src/core/lib/slice/slice_buffer.cc )
-  s.files += %w( src/core/lib/slice/slice_hash_table.h )
   s.files += %w( src/core/lib/slice/slice_intern.cc )
   s.files += %w( src/core/lib/slice/slice_internal.h )
   s.files += %w( src/core/lib/slice/slice_string_helpers.cc )
   s.files += %w( src/core/lib/slice/slice_string_helpers.h )
   s.files += %w( src/core/lib/slice/slice_utils.h )
-  s.files += %w( src/core/lib/slice/slice_weak_hash_table.h )
   s.files += %w( src/core/lib/surface/api_trace.cc )
   s.files += %w( src/core/lib/surface/api_trace.h )
   s.files += %w( src/core/lib/surface/byte_buffer.cc )
@@ -1007,6 +867,8 @@ Gem::Specification.new do |s|
   s.files += %w( src/core/lib/surface/validate_metadata.cc )
   s.files += %w( src/core/lib/surface/validate_metadata.h )
   s.files += %w( src/core/lib/surface/version.cc )
+  s.files += %w( src/core/lib/transport/authority_override.cc )
+  s.files += %w( src/core/lib/transport/authority_override.h )
   s.files += %w( src/core/lib/transport/bdp_estimator.cc )
   s.files += %w( src/core/lib/transport/bdp_estimator.h )
   s.files += %w( src/core/lib/transport/byte_stream.cc )
@@ -1103,12 +965,15 @@ Gem::Specification.new do |s|
   s.files += %w( third_party/abseil-cpp/absl/base/internal/bits.h )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/cycleclock.cc )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/cycleclock.h )
+  s.files += %w( third_party/abseil-cpp/absl/base/internal/direct_mmap.h )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/endian.h )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/errno_saver.h )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/hide_ptr.h )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/identity.h )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/inline_variable.h )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/invoke.h )
+  s.files += %w( third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc )
+  s.files += %w( third_party/abseil-cpp/absl/base/internal/low_level_alloc.h )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/per_thread_tls.h )
   s.files += %w( third_party/abseil-cpp/absl/base/internal/raw_logging.cc )
@@ -1141,19 +1006,52 @@ Gem::Specification.new do |s|
   s.files += %w( third_party/abseil-cpp/absl/base/policy_checks.h )
   s.files += %w( third_party/abseil-cpp/absl/base/port.h )
   s.files += %w( third_party/abseil-cpp/absl/base/thread_annotations.h )
+  s.files += %w( third_party/abseil-cpp/absl/container/fixed_array.h )
   s.files += %w( third_party/abseil-cpp/absl/container/inlined_vector.h )
   s.files += %w( third_party/abseil-cpp/absl/container/internal/compressed_tuple.h )
   s.files += %w( third_party/abseil-cpp/absl/container/internal/inlined_vector.h )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/demangle.cc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/demangle.h )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/symbolize.h )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/internal/vdso_support.h )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/stacktrace.cc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/stacktrace.h )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/symbolize.cc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/symbolize.h )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/symbolize_elf.inc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc )
+  s.files += %w( third_party/abseil-cpp/absl/debugging/symbolize_win32.inc )
+  s.files += %w( third_party/abseil-cpp/absl/functional/function_ref.h )
+  s.files += %w( third_party/abseil-cpp/absl/functional/internal/function_ref.h )
   s.files += %w( third_party/abseil-cpp/absl/memory/memory.h )
   s.files += %w( third_party/abseil-cpp/absl/meta/type_traits.h )
   s.files += %w( third_party/abseil-cpp/absl/numeric/int128.cc )
   s.files += %w( third_party/abseil-cpp/absl/numeric/int128.h )
   s.files += %w( third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc )
   s.files += %w( third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc )
+  s.files += %w( third_party/abseil-cpp/absl/status/status.cc )
+  s.files += %w( third_party/abseil-cpp/absl/status/status.h )
+  s.files += %w( third_party/abseil-cpp/absl/status/status_payload_printer.cc )
+  s.files += %w( third_party/abseil-cpp/absl/status/status_payload_printer.h )
   s.files += %w( third_party/abseil-cpp/absl/strings/ascii.cc )
   s.files += %w( third_party/abseil-cpp/absl/strings/ascii.h )
   s.files += %w( third_party/abseil-cpp/absl/strings/charconv.cc )
   s.files += %w( third_party/abseil-cpp/absl/strings/charconv.h )
+  s.files += %w( third_party/abseil-cpp/absl/strings/cord.cc )
+  s.files += %w( third_party/abseil-cpp/absl/strings/cord.h )
   s.files += %w( third_party/abseil-cpp/absl/strings/escaping.cc )
   s.files += %w( third_party/abseil-cpp/absl/strings/escaping.h )
   s.files += %w( third_party/abseil-cpp/absl/strings/internal/char_map.h )
@@ -1161,6 +1059,7 @@ Gem::Specification.new do |s|
   s.files += %w( third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h )
   s.files += %w( third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc )
   s.files += %w( third_party/abseil-cpp/absl/strings/internal/charconv_parse.h )
+  s.files += %w( third_party/abseil-cpp/absl/strings/internal/cord_internal.h )
   s.files += %w( third_party/abseil-cpp/absl/strings/internal/escaping.cc )
   s.files += %w( third_party/abseil-cpp/absl/strings/internal/escaping.h )
   s.files += %w( third_party/abseil-cpp/absl/strings/internal/memutil.cc )
@@ -1203,6 +1102,24 @@ Gem::Specification.new do |s|
   s.files += %w( third_party/abseil-cpp/absl/strings/strip.h )
   s.files += %w( third_party/abseil-cpp/absl/strings/substitute.cc )
   s.files += %w( third_party/abseil-cpp/absl/strings/substitute.h )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/barrier.cc )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/barrier.h )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/blocking_counter.cc )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/blocking_counter.h )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/internal/waiter.cc )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/internal/waiter.h )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/mutex.cc )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/mutex.h )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/notification.cc )
+  s.files += %w( third_party/abseil-cpp/absl/synchronization/notification.h )
   s.files += %w( third_party/abseil-cpp/absl/time/civil_time.cc )
   s.files += %w( third_party/abseil-cpp/absl/time/civil_time.h )
   s.files += %w( third_party/abseil-cpp/absl/time/clock.cc )
@@ -1789,10 +1706,57 @@ Gem::Specification.new do |s|
   s.files += %w( third_party/cares/config_freebsd/ares_config.h )
   s.files += %w( third_party/cares/config_linux/ares_config.h )
   s.files += %w( third_party/cares/config_openbsd/ares_config.h )
+  s.files += %w( third_party/re2/re2/bitmap256.h )
+  s.files += %w( third_party/re2/re2/bitstate.cc )
+  s.files += %w( third_party/re2/re2/compile.cc )
+  s.files += %w( third_party/re2/re2/dfa.cc )
+  s.files += %w( third_party/re2/re2/filtered_re2.cc )
+  s.files += %w( third_party/re2/re2/filtered_re2.h )
+  s.files += %w( third_party/re2/re2/mimics_pcre.cc )
+  s.files += %w( third_party/re2/re2/nfa.cc )
+  s.files += %w( third_party/re2/re2/onepass.cc )
+  s.files += %w( third_party/re2/re2/parse.cc )
+  s.files += %w( third_party/re2/re2/perl_groups.cc )
+  s.files += %w( third_party/re2/re2/pod_array.h )
+  s.files += %w( third_party/re2/re2/prefilter.cc )
+  s.files += %w( third_party/re2/re2/prefilter.h )
+  s.files += %w( third_party/re2/re2/prefilter_tree.cc )
+  s.files += %w( third_party/re2/re2/prefilter_tree.h )
+  s.files += %w( third_party/re2/re2/prog.cc )
+  s.files += %w( third_party/re2/re2/prog.h )
+  s.files += %w( third_party/re2/re2/re2.cc )
+  s.files += %w( third_party/re2/re2/re2.h )
+  s.files += %w( third_party/re2/re2/regexp.cc )
+  s.files += %w( third_party/re2/re2/regexp.h )
+  s.files += %w( third_party/re2/re2/set.cc )
+  s.files += %w( third_party/re2/re2/set.h )
+  s.files += %w( third_party/re2/re2/simplify.cc )
+  s.files += %w( third_party/re2/re2/sparse_array.h )
+  s.files += %w( third_party/re2/re2/sparse_set.h )
+  s.files += %w( third_party/re2/re2/stringpiece.cc )
+  s.files += %w( third_party/re2/re2/stringpiece.h )
+  s.files += %w( third_party/re2/re2/tostring.cc )
+  s.files += %w( third_party/re2/re2/unicode_casefold.cc )
+  s.files += %w( third_party/re2/re2/unicode_casefold.h )
+  s.files += %w( third_party/re2/re2/unicode_groups.cc )
+  s.files += %w( third_party/re2/re2/unicode_groups.h )
+  s.files += %w( third_party/re2/re2/walker-inl.h )
+  s.files += %w( third_party/re2/util/benchmark.h )
+  s.files += %w( third_party/re2/util/flags.h )
+  s.files += %w( third_party/re2/util/logging.h )
+  s.files += %w( third_party/re2/util/malloc_counter.h )
+  s.files += %w( third_party/re2/util/mix.h )
+  s.files += %w( third_party/re2/util/mutex.h )
+  s.files += %w( third_party/re2/util/pcre.cc )
+  s.files += %w( third_party/re2/util/pcre.h )
+  s.files += %w( third_party/re2/util/rune.cc )
+  s.files += %w( third_party/re2/util/strutil.cc )
+  s.files += %w( third_party/re2/util/strutil.h )
+  s.files += %w( third_party/re2/util/test.h )
+  s.files += %w( third_party/re2/util/utf.h )
+  s.files += %w( third_party/re2/util/util.h )
   s.files += %w( third_party/upb/upb/decode.c )
   s.files += %w( third_party/upb/upb/decode.h )
-  s.files += %w( third_party/upb/upb/def.c )
-  s.files += %w( third_party/upb/upb/def.h )
   s.files += %w( third_party/upb/upb/encode.c )
   s.files += %w( third_party/upb/upb/encode.h )
   s.files += %w( third_party/upb/upb/msg.c )
@@ -1800,12 +1764,8 @@ Gem::Specification.new do |s|
   s.files += %w( third_party/upb/upb/port.c )
   s.files += %w( third_party/upb/upb/port_def.inc )
   s.files += %w( third_party/upb/upb/port_undef.inc )
-  s.files += %w( third_party/upb/upb/reflection.c )
-  s.files += %w( third_party/upb/upb/reflection.h )
   s.files += %w( third_party/upb/upb/table.c )
   s.files += %w( third_party/upb/upb/table.int.h )
-  s.files += %w( third_party/upb/upb/text_encode.c )
-  s.files += %w( third_party/upb/upb/text_encode.h )
   s.files += %w( third_party/upb/upb/upb.c )
   s.files += %w( third_party/upb/upb/upb.h )
   s.files += %w( third_party/upb/upb/upb.hpp )

+ 106 - 252
grpc.gyp

@@ -375,9 +375,11 @@
       'type': 'static_library',
       'dependencies': [
         'absl/time:time',
+        'absl/synchronization:synchronization',
         'absl/strings:strings',
         'absl/strings:str_format',
         'absl/memory:memory',
+        'absl/base:base',
       ],
       'sources': [
         'src/core/lib/gpr/alloc.cc',
@@ -432,6 +434,7 @@
         'upb',
         'absl/types:optional',
         'absl/strings:strings',
+        'absl/status:status',
         'absl/container:inlined_vector',
       ],
       'sources': [
@@ -548,144 +551,77 @@
         'src/core/ext/transport/inproc/inproc_plugin.cc',
         'src/core/ext/transport/inproc/inproc_transport.cc',
         'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c',
-        'src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c',
         'src/core/ext/upb-generated/envoy/annotations/resource.upb.c',
-        'src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cds.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/eds.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/lds.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/rds.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/srds.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c',
-        'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c',
-        'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c',
-        'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c',
-        'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c',
-        'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c',
-        'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/http.upb.c',
-        'src/core/ext/upb-generated/envoy/type/http.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c',
-        'src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/matcher/string.upb.c',
-        'src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c',
-        'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/percent.upb.c',
-        'src/core/ext/upb-generated/envoy/type/percent.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/range.upb.c',
-        'src/core/ext/upb-generated/envoy/type/range.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/semantic_version.upb.c',
-        'src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c',
-        'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c',
+        'src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c',
+        'src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c',
+        'src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c',
+        'src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c',
+        'src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c',
+        'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c',
+        'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c',
+        'src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c',
+        'src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c',
+        'src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c',
+        'src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c',
+        'src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c',
+        'src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c',
+        'src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c',
+        'src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c',
+        'src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c',
+        'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c',
+        'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c',
+        'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c',
+        'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c',
+        'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c',
+        'src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c',
+        'src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c',
+        'src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c',
+        'src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c',
+        'src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c',
+        'src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c',
+        'src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c',
+        'src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c',
+        'src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c',
+        'src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c',
+        'src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c',
+        'src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c',
+        'src/core/ext/upb-generated/envoy/type/v3/http.upb.c',
+        'src/core/ext/upb-generated/envoy/type/v3/percent.upb.c',
+        'src/core/ext/upb-generated/envoy/type/v3/range.upb.c',
+        'src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c',
         'src/core/ext/upb-generated/gogoproto/gogo.upb.c',
-        'src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c',
         'src/core/ext/upb-generated/google/api/annotations.upb.c',
-        'src/core/ext/upb-generated/google/api/annotations.upbdefs.c',
         'src/core/ext/upb-generated/google/api/http.upb.c',
-        'src/core/ext/upb-generated/google/api/http.upbdefs.c',
         'src/core/ext/upb-generated/google/protobuf/any.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/any.upbdefs.c',
-        'src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c',
+        'src/core/ext/upb-generated/google/protobuf/descriptor.upb.c',
         'src/core/ext/upb-generated/google/protobuf/duration.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c',
         'src/core/ext/upb-generated/google/protobuf/empty.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c',
         'src/core/ext/upb-generated/google/protobuf/struct.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c',
         'src/core/ext/upb-generated/google/protobuf/timestamp.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c',
         'src/core/ext/upb-generated/google/protobuf/wrappers.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c',
         'src/core/ext/upb-generated/google/rpc/status.upb.c',
-        'src/core/ext/upb-generated/google/rpc/status.upbdefs.c',
         'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c',
         'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c',
         'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c',
         'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c',
         'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c',
         'src/core/ext/upb-generated/udpa/annotations/migrate.upb.c',
-        'src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c',
         'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c',
-        'src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c',
         'src/core/ext/upb-generated/udpa/annotations/status.upb.c',
-        'src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c',
+        'src/core/ext/upb-generated/udpa/annotations/versioning.upb.c',
         'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c',
         'src/core/ext/upb-generated/validate/validate.upb.c',
-        'src/core/ext/upb-generated/validate/validate.upbdefs.c',
         'src/core/lib/avl/avl.cc',
         'src/core/lib/backoff/backoff.cc',
         'src/core/lib/channel/channel_args.cc',
@@ -848,7 +784,6 @@
         'src/core/lib/security/transport/secure_endpoint.cc',
         'src/core/lib/security/transport/security_handshaker.cc',
         'src/core/lib/security/transport/server_auth_filter.cc',
-        'src/core/lib/security/transport/target_authority_table.cc',
         'src/core/lib/security/transport/tsi_error.cc',
         'src/core/lib/security/util/json_util.cc',
         'src/core/lib/slice/b64.cc',
@@ -877,6 +812,7 @@
         'src/core/lib/surface/server.cc',
         'src/core/lib/surface/validate_metadata.cc',
         'src/core/lib/surface/version.cc',
+        'src/core/lib/transport/authority_override.cc',
         'src/core/lib/transport/bdp_estimator.cc',
         'src/core/lib/transport/byte_stream.cc',
         'src/core/lib/transport/connectivity_state.cc',
@@ -1007,6 +943,7 @@
         'upb',
         'absl/types:optional',
         'absl/strings:strings',
+        'absl/status:status',
         'absl/container:inlined_vector',
       ],
       'sources': [
@@ -1121,141 +1058,74 @@
         'src/core/ext/transport/inproc/inproc_plugin.cc',
         'src/core/ext/transport/inproc/inproc_transport.cc',
         'src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c',
-        'src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c',
         'src/core/ext/upb-generated/envoy/annotations/resource.upb.c',
-        'src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cds.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/eds.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/lds.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/rds.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/api/v2/srds.upb.c',
-        'src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c',
-        'src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c',
-        'src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c',
-        'src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c',
-        'src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c',
-        'src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c',
-        'src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/http.upb.c',
-        'src/core/ext/upb-generated/envoy/type/http.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c',
-        'src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/matcher/string.upb.c',
-        'src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c',
-        'src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/percent.upb.c',
-        'src/core/ext/upb-generated/envoy/type/percent.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/range.upb.c',
-        'src/core/ext/upb-generated/envoy/type/range.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/semantic_version.upb.c',
-        'src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c',
-        'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c',
-        'src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c',
+        'src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c',
+        'src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c',
+        'src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c',
+        'src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c',
+        'src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c',
+        'src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c',
+        'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c',
+        'src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c',
+        'src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c',
+        'src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c',
+        'src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c',
+        'src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c',
+        'src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c',
+        'src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c',
+        'src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c',
+        'src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c',
+        'src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c',
+        'src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c',
+        'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c',
+        'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c',
+        'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c',
+        'src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c',
+        'src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c',
+        'src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c',
+        'src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c',
+        'src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c',
+        'src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c',
+        'src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c',
+        'src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c',
+        'src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c',
+        'src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c',
+        'src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c',
+        'src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c',
+        'src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c',
+        'src/core/ext/upb-generated/envoy/type/v3/http.upb.c',
+        'src/core/ext/upb-generated/envoy/type/v3/percent.upb.c',
+        'src/core/ext/upb-generated/envoy/type/v3/range.upb.c',
+        'src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c',
         'src/core/ext/upb-generated/gogoproto/gogo.upb.c',
-        'src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c',
         'src/core/ext/upb-generated/google/api/annotations.upb.c',
-        'src/core/ext/upb-generated/google/api/annotations.upbdefs.c',
         'src/core/ext/upb-generated/google/api/http.upb.c',
-        'src/core/ext/upb-generated/google/api/http.upbdefs.c',
         'src/core/ext/upb-generated/google/protobuf/any.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/any.upbdefs.c',
-        'src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c',
+        'src/core/ext/upb-generated/google/protobuf/descriptor.upb.c',
         'src/core/ext/upb-generated/google/protobuf/duration.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c',
         'src/core/ext/upb-generated/google/protobuf/empty.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c',
         'src/core/ext/upb-generated/google/protobuf/struct.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c',
         'src/core/ext/upb-generated/google/protobuf/timestamp.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c',
         'src/core/ext/upb-generated/google/protobuf/wrappers.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c',
         'src/core/ext/upb-generated/google/rpc/status.upb.c',
-        'src/core/ext/upb-generated/google/rpc/status.upbdefs.c',
         'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c',
         'src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c',
         'src/core/ext/upb-generated/udpa/annotations/migrate.upb.c',
-        'src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c',
         'src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c',
-        'src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c',
         'src/core/ext/upb-generated/udpa/annotations/status.upb.c',
-        'src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c',
+        'src/core/ext/upb-generated/udpa/annotations/versioning.upb.c',
         'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c',
         'src/core/ext/upb-generated/validate/validate.upb.c',
-        'src/core/ext/upb-generated/validate/validate.upbdefs.c',
         'src/core/lib/avl/avl.cc',
         'src/core/lib/backoff/backoff.cc',
         'src/core/lib/channel/channel_args.cc',
@@ -1404,6 +1274,7 @@
         'src/core/lib/surface/server.cc',
         'src/core/lib/surface/validate_metadata.cc',
         'src/core/lib/surface/version.cc',
+        'src/core/lib/transport/authority_override.cc',
         'src/core/lib/transport/bdp_estimator.cc',
         'src/core/lib/transport/byte_stream.cc',
         'src/core/lib/transport/connectivity_state.cc',
@@ -2033,23 +1904,6 @@
         'third_party/upb/upb/port.c',
         'third_party/upb/upb/table.c',
         'third_party/upb/upb/upb.c',
-        'third_party/upb/upb/def.c',
-        'third_party/upb/upb/reflection.c',
-        'third_party/upb/upb/text_encode.c',
-        'src/core/ext/upb-generated/google/protobuf/any.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/any.upbdefs.c',
-        'src/core/ext/upb-generated/google/protobuf/descriptor.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c',
-        'src/core/ext/upb-generated/google/protobuf/duration.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c',
-        'src/core/ext/upb-generated/google/protobuf/empty.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c',
-        'src/core/ext/upb-generated/google/protobuf/struct.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c',
-        'src/core/ext/upb-generated/google/protobuf/timestamp.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c',
-        'src/core/ext/upb-generated/google/protobuf/wrappers.upb.c',
-        'src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c',
       ],
     },
     {

+ 31 - 14
include/grpc/grpc_security.h

@@ -119,6 +119,18 @@ GRPCAPI void grpc_ssl_session_cache_destroy(grpc_ssl_session_cache* cache);
 GRPCAPI grpc_arg
 grpc_ssl_session_cache_create_channel_arg(grpc_ssl_session_cache* cache);
 
+/** --- grpc_call_credentials object.
+
+   A call credentials object represents a way to authenticate on a particular
+   call. These credentials can be composed with a channel credentials object
+   so that they are sent with every call on this channel.  */
+
+typedef struct grpc_call_credentials grpc_call_credentials;
+
+/** Releases a call credentials object.
+   The creator of the credentials object is responsible for its release. */
+GRPCAPI void grpc_call_credentials_release(grpc_call_credentials* creds);
+
 /** --- grpc_channel_credentials object. ---
 
    A channel credentials object represents a way to authenticate a client on a
@@ -133,8 +145,23 @@ GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials* creds);
 /** Creates default credentials to connect to a google gRPC service.
    WARNING: Do NOT use this credentials to connect to a non-google service as
    this could result in an oauth2 token leak. The security level of the
-   resulting connection is GRPC_PRIVACY_AND_INTEGRITY. */
-GRPCAPI grpc_channel_credentials* grpc_google_default_credentials_create(void);
+   resulting connection is GRPC_PRIVACY_AND_INTEGRITY.
+
+   If specified, the supplied call credentials object will be attached to the
+   returned channel credentials object. The call_credentials object must remain
+   valid throughout the lifetime of the returned grpc_channel_credentials
+   object. It is expected that the call credentials object was generated
+   according to the Application Default Credentials mechanism and asserts the
+   identity of the default service account of the machine. Supplying any other
+   sort of call credential will result in undefined behavior, up to and
+   including the sudden and unexpected failure of RPCs.
+
+   If nullptr is supplied, the returned channel credentials object will use a
+   call credentials object based on the Application Default Credentials
+   mechanism.
+*/
+GRPCAPI grpc_channel_credentials* grpc_google_default_credentials_create(
+    grpc_call_credentials* call_credentials);
 
 /** Callback for getting the SSL roots override from the application.
    In case of success, *pem_roots_certs must be set to a NULL terminated string
@@ -272,24 +299,14 @@ GRPCAPI grpc_channel_credentials* grpc_ssl_credentials_create_ex(
     const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
     const grpc_ssl_verify_peer_options* verify_options, void* reserved);
 
-/** --- grpc_call_credentials object.
-
-   A call credentials object represents a way to authenticate on a particular
-   call. These credentials can be composed with a channel credentials object
-   so that they are sent with every call on this channel.  */
-
-typedef struct grpc_call_credentials grpc_call_credentials;
-
-/** Releases a call credentials object.
-   The creator of the credentials object is responsible for its release. */
-GRPCAPI void grpc_call_credentials_release(grpc_call_credentials* creds);
-
 /** Creates a composite channel credentials object. The security level of
  * resulting connection is determined by channel_creds. */
 GRPCAPI grpc_channel_credentials* grpc_composite_channel_credentials_create(
     grpc_channel_credentials* channel_creds, grpc_call_credentials* call_creds,
     void* reserved);
 
+/** --- composite credentials. */
+
 /** Creates a composite call credentials object. */
 GRPCAPI grpc_call_credentials* grpc_composite_call_credentials_create(
     grpc_call_credentials* creds1, grpc_call_credentials* creds2,

+ 6 - 1
include/grpc/impl/codegen/port_platform.h

@@ -31,8 +31,13 @@
  * Defines GPR_ABSEIL_SYNC to use synchronization features from Abseil
  */
 #ifndef GPR_ABSEIL_SYNC
-/* #define GPR_ABSEIL_SYNC 1 */
+#if defined(__APPLE__)
+// This is disabled on Apple platforms because macos/grpc_basictests_c_cpp
+// fails with this. https://github.com/grpc/grpc/issues/23661
+#else
+#define GPR_ABSEIL_SYNC 1
 #endif
+#endif  // GPR_ABSEIL_SYNC
 
 /* Get windows.h included everywhere (we need it) */
 #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32)

+ 45 - 22
include/grpcpp/create_channel.h

@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2019 gRPC authors.
+ * Copyright 2015 gRPC authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,36 +19,59 @@
 #ifndef GRPCPP_CREATE_CHANNEL_H
 #define GRPCPP_CREATE_CHANNEL_H
 
-#include <grpcpp/create_channel_impl.h>
+#include <memory>
+
+#include <grpcpp/channel.h>
+#include <grpcpp/impl/codegen/client_interceptor.h>
+#include <grpcpp/security/credentials.h>
 #include <grpcpp/support/channel_arguments.h>
+#include <grpcpp/support/config.h>
 
 namespace grpc {
+/// Create a new \a Channel pointing to \a target.
+///
+/// \param target The URI of the endpoint to connect to.
+/// \param creds Credentials to use for the created channel. If it does not
+/// hold an object or is invalid, a lame channel (one on which all operations
+/// fail) is returned.
+std::shared_ptr<Channel> CreateChannel(
+    const grpc::string& target,
+    const std::shared_ptr<ChannelCredentials>& creds);
 
-static inline std::shared_ptr<::grpc::Channel> CreateChannel(
-    const std::string& target,
-    const std::shared_ptr<ChannelCredentials>& creds) {
-  return ::grpc_impl::CreateChannelImpl(target, creds);
-}
-
-static inline std::shared_ptr<::grpc::Channel> CreateCustomChannel(
-    const std::string& target, const std::shared_ptr<ChannelCredentials>& creds,
-    const ChannelArguments& args) {
-  return ::grpc_impl::CreateCustomChannelImpl(target, creds, args);
-}
+/// Create a new \em custom \a Channel pointing to \a target.
+///
+/// \warning For advanced use and testing ONLY. Override default channel
+/// arguments only if necessary.
+///
+/// \param target The URI of the endpoint to connect to.
+/// \param creds Credentials to use for the created channel. If it does not
+/// hold an object or is invalid, a lame channel (one on which all operations
+/// fail) is returned.
+/// \param args Options for channel creation.
+std::shared_ptr<Channel> CreateCustomChannel(
+    const grpc::string& target,
+    const std::shared_ptr<ChannelCredentials>& creds,
+    const ChannelArguments& args);
 
 namespace experimental {
-
-static inline std::shared_ptr<::grpc::Channel>
-CreateCustomChannelWithInterceptors(
-    const std::string& target, const std::shared_ptr<ChannelCredentials>& creds,
+/// Create a new \em custom \a Channel pointing to \a target with \a
+/// interceptors being invoked per call.
+///
+/// \warning For advanced use and testing ONLY. Override default channel
+/// arguments only if necessary.
+///
+/// \param target The URI of the endpoint to connect to.
+/// \param creds Credentials to use for the created channel. If it does not
+/// hold an object or is invalid, a lame channel (one on which all operations
+/// fail) is returned.
+/// \param args Options for channel creation.
+std::shared_ptr<Channel> CreateCustomChannelWithInterceptors(
+    const grpc::string& target,
+    const std::shared_ptr<ChannelCredentials>& creds,
     const ChannelArguments& args,
     std::vector<
         std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
-        interceptor_creators) {
-  return ::grpc_impl::experimental::CreateCustomChannelWithInterceptors(
-      target, creds, args, std::move(interceptor_creators));
-}
-
+        interceptor_creators);
 }  // namespace experimental
 }  // namespace grpc
 

+ 0 - 78
include/grpcpp/create_channel_impl.h

@@ -1,78 +0,0 @@
-/*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef GRPCPP_CREATE_CHANNEL_IMPL_H
-#define GRPCPP_CREATE_CHANNEL_IMPL_H
-
-#include <memory>
-
-#include <grpcpp/channel.h>
-#include <grpcpp/impl/codegen/client_interceptor.h>
-#include <grpcpp/security/credentials.h>
-#include <grpcpp/support/channel_arguments.h>
-#include <grpcpp/support/config.h>
-
-namespace grpc_impl {
-/// Create a new \a Channel pointing to \a target.
-///
-/// \param target The URI of the endpoint to connect to.
-/// \param creds Credentials to use for the created channel. If it does not
-/// hold an object or is invalid, a lame channel (one on which all operations
-/// fail) is returned.
-std::shared_ptr<::grpc::Channel> CreateChannelImpl(
-    const std::string& target,
-    const std::shared_ptr<::grpc::ChannelCredentials>& creds);
-
-/// Create a new \em custom \a Channel pointing to \a target.
-///
-/// \warning For advanced use and testing ONLY. Override default channel
-/// arguments only if necessary.
-///
-/// \param target The URI of the endpoint to connect to.
-/// \param creds Credentials to use for the created channel. If it does not
-/// hold an object or is invalid, a lame channel (one on which all operations
-/// fail) is returned.
-/// \param args Options for channel creation.
-std::shared_ptr<::grpc::Channel> CreateCustomChannelImpl(
-    const std::string& target,
-    const std::shared_ptr<::grpc::ChannelCredentials>& creds,
-    const ::grpc::ChannelArguments& args);
-
-namespace experimental {
-/// Create a new \em custom \a Channel pointing to \a target with \a
-/// interceptors being invoked per call.
-///
-/// \warning For advanced use and testing ONLY. Override default channel
-/// arguments only if necessary.
-///
-/// \param target The URI of the endpoint to connect to.
-/// \param creds Credentials to use for the created channel. If it does not
-/// hold an object or is invalid, a lame channel (one on which all operations
-/// fail) is returned.
-/// \param args Options for channel creation.
-std::shared_ptr<::grpc::Channel> CreateCustomChannelWithInterceptors(
-    const std::string& target,
-    const std::shared_ptr<grpc::ChannelCredentials>& creds,
-    const ::grpc::ChannelArguments& args,
-    std::vector<
-        std::unique_ptr<grpc::experimental::ClientInterceptorFactoryInterface>>
-        interceptor_creators);
-}  // namespace experimental
-}  // namespace grpc_impl
-
-#endif  // GRPCPP_CREATE_CHANNEL_IMPL_H

+ 25 - 7
include/grpcpp/ext/proto_server_reflection_plugin.h

@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2019 gRPC authors.
+ * Copyright 2015 gRPC authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,17 +19,35 @@
 #ifndef GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_H
 #define GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_H
 
-#include <grpcpp/ext/proto_server_reflection_plugin_impl.h>
+#include <grpcpp/impl/server_builder_plugin.h>
+#include <grpcpp/support/config.h>
+
+namespace grpc_impl {
+class ServerInitializer;
+}  // namespace grpc_impl
 
 namespace grpc {
+class ProtoServerReflection;
+
 namespace reflection {
 
-typedef ::grpc_impl::reflection::ProtoServerReflectionPlugin
-    ProtoServerReflectionPlugin;
+class ProtoServerReflectionPlugin : public ::grpc::ServerBuilderPlugin {
+ public:
+  ProtoServerReflectionPlugin();
+  ::std::string name() override;
+  void InitServer(::grpc_impl::ServerInitializer* si) override;
+  void Finish(::grpc_impl::ServerInitializer* si) override;
+  void ChangeArguments(const ::std::string& name, void* value) override;
+  bool has_async_methods() const override;
+  bool has_sync_methods() const override;
+
+ private:
+  std::shared_ptr<grpc::ProtoServerReflection> reflection_service_;
+};
 
-static inline void InitProtoReflectionServerBuilderPlugin() {
-  ::grpc_impl::reflection::InitProtoReflectionServerBuilderPlugin();
-}
+/// Add proto reflection plugin to \a ServerBuilder.
+/// This function should be called at the static initialization time.
+void InitProtoReflectionServerBuilderPlugin();
 
 }  // namespace reflection
 }  // namespace grpc

+ 0 - 55
include/grpcpp/ext/proto_server_reflection_plugin_impl.h

@@ -1,55 +0,0 @@
-/*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_IMPL_H
-#define GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_IMPL_H
-
-#include <grpcpp/impl/server_builder_plugin.h>
-#include <grpcpp/support/config.h>
-
-namespace grpc {
-class ProtoServerReflection;
-}  // namespace grpc
-
-namespace grpc_impl {
-class ServerInitializer;
-
-namespace reflection {
-
-class ProtoServerReflectionPlugin : public ::grpc::ServerBuilderPlugin {
- public:
-  ProtoServerReflectionPlugin();
-  ::std::string name() override;
-  void InitServer(::grpc_impl::ServerInitializer* si) override;
-  void Finish(::grpc_impl::ServerInitializer* si) override;
-  void ChangeArguments(const ::std::string& name, void* value) override;
-  bool has_async_methods() const override;
-  bool has_sync_methods() const override;
-
- private:
-  std::shared_ptr<grpc::ProtoServerReflection> reflection_service_;
-};
-
-/// Add proto reflection plugin to \a ServerBuilder.
-/// This function should be called at the static initialization time.
-void InitProtoReflectionServerBuilderPlugin();
-
-}  // namespace reflection
-}  // namespace grpc_impl
-
-#endif  // GRPCPP_EXT_PROTO_SERVER_REFLECTION_PLUGIN_IMPL_H

+ 21 - 10
include/grpcpp/ext/server_load_reporting.h

@@ -19,22 +19,33 @@
 #ifndef GRPCPP_EXT_SERVER_LOAD_REPORTING_H
 #define GRPCPP_EXT_SERVER_LOAD_REPORTING_H
 
-#include <grpcpp/ext/server_load_reporting_impl.h>
+#include <grpc/support/port_platform.h>
+
+#include <grpc/load_reporting.h>
+#include <grpcpp/impl/codegen/config.h>
+#include <grpcpp/impl/codegen/server_context.h>
+#include <grpcpp/impl/server_builder_option.h>
 
 namespace grpc {
 namespace load_reporter {
 namespace experimental {
 
-typedef ::grpc_impl::load_reporter::experimental::
-    LoadReportingServiceServerBuilderOption
-        LoadReportingServiceServerBuilderOption;
+// The ServerBuilderOption to enable server-side load reporting feature. To
+// enable the feature, please make sure the binary builds with the
+// grpcpp_server_load_reporting library and set this option in the
+// ServerBuilder.
+class LoadReportingServiceServerBuilderOption
+    : public grpc::ServerBuilderOption {
+ public:
+  void UpdateArguments(::grpc::ChannelArguments* args) override;
+  void UpdatePlugins(std::vector<std::unique_ptr<::grpc::ServerBuilderPlugin>>*
+                         plugins) override;
+};
 
-static inline void AddLoadReportingCost(grpc::ServerContext* ctx,
-                                        const std::string& cost_name,
-                                        double cost_value) {
-  ::grpc_impl::load_reporter::experimental::AddLoadReportingCost(ctx, cost_name,
-                                                                 cost_value);
-}
+// Adds the load reporting cost with \a cost_name and \a cost_value in the
+// trailing metadata of the server context.
+void AddLoadReportingCost(grpc::ServerContext* ctx,
+                          const std::string& cost_name, double cost_value);
 
 }  // namespace experimental
 }  // namespace load_reporter

+ 0 - 54
include/grpcpp/ext/server_load_reporting_impl.h

@@ -1,54 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef GRPCPP_EXT_SERVER_LOAD_REPORTING_IMPL_H
-#define GRPCPP_EXT_SERVER_LOAD_REPORTING_IMPL_H
-
-#include <grpc/support/port_platform.h>
-
-#include <grpc/load_reporting.h>
-#include <grpcpp/impl/codegen/config.h>
-#include <grpcpp/impl/codegen/server_context.h>
-#include <grpcpp/impl/server_builder_option.h>
-
-namespace grpc_impl {
-namespace load_reporter {
-namespace experimental {
-
-// The ServerBuilderOption to enable server-side load reporting feature. To
-// enable the feature, please make sure the binary builds with the
-// grpcpp_server_load_reporting library and set this option in the
-// ServerBuilder.
-class LoadReportingServiceServerBuilderOption
-    : public grpc::ServerBuilderOption {
- public:
-  void UpdateArguments(::grpc::ChannelArguments* args) override;
-  void UpdatePlugins(std::vector<std::unique_ptr<::grpc::ServerBuilderPlugin>>*
-                         plugins) override;
-};
-
-// Adds the load reporting cost with \a cost_name and \a cost_value in the
-// trailing metadata of the server context.
-void AddLoadReportingCost(grpc::ServerContext* ctx,
-                          const std::string& cost_name, double cost_value);
-
-}  // namespace experimental
-}  // namespace load_reporter
-}  // namespace grpc_impl
-
-#endif  // GRPCPP_EXT_SERVER_LOAD_REPORTING_IMPL_H

+ 197 - 2
include/grpcpp/generic/generic_stub.h

@@ -19,11 +19,206 @@
 #ifndef GRPCPP_GENERIC_GENERIC_STUB_H
 #define GRPCPP_GENERIC_GENERIC_STUB_H
 
-#include <grpcpp/generic/generic_stub_impl.h>
+#include <functional>
 
+#include <grpcpp/client_context.h>
+#include <grpcpp/impl/rpc_method.h>
+#include <grpcpp/support/async_stream_impl.h>
+#include <grpcpp/support/async_unary_call_impl.h>
+#include <grpcpp/support/byte_buffer.h>
+#include <grpcpp/support/client_callback_impl.h>
+#include <grpcpp/support/status.h>
+
+namespace grpc_impl {
+class CompletionQueue;
+}  // namespace grpc_impl
 namespace grpc {
 
-typedef ::grpc_impl::GenericStub GenericStub;
+typedef ::grpc_impl::ClientAsyncReaderWriter<ByteBuffer, ByteBuffer>
+    GenericClientAsyncReaderWriter;
+typedef ::grpc_impl::ClientAsyncResponseReader<ByteBuffer>
+    GenericClientAsyncResponseReader;
+
+/// Generic stubs provide a type-unaware interface to call gRPC methods
+/// by name. In practice, the Request and Response types should be basic
+/// types like grpc::ByteBuffer or proto::MessageLite (the base protobuf).
+template <class RequestType, class ResponseType>
+class TemplatedGenericStub final {
+ public:
+  explicit TemplatedGenericStub(std::shared_ptr<grpc::ChannelInterface> channel)
+      : channel_(channel) {}
+
+  /// Setup a call to a named method \a method using \a context, but don't
+  /// start it. Let it be started explicitly with StartCall and a tag.
+  /// The return value only indicates whether or not registration of the call
+  /// succeeded (i.e. the call won't proceed if the return value is nullptr).
+  std::unique_ptr<
+      ::grpc_impl::ClientAsyncReaderWriter<RequestType, ResponseType>>
+  PrepareCall(ClientContext* context, const std::string& method,
+              ::grpc_impl::CompletionQueue* cq) {
+    return CallInternal(channel_.get(), context, method, cq, false, nullptr);
+  }
+
+  /// Setup a unary call to a named method \a method using \a context, and don't
+  /// start it. Let it be started explicitly with StartCall.
+  /// The return value only indicates whether or not registration of the call
+  /// succeeded (i.e. the call won't proceed if the return value is nullptr).
+  std::unique_ptr<::grpc_impl::ClientAsyncResponseReader<ResponseType>>
+  PrepareUnaryCall(ClientContext* context, const std::string& method,
+                   const RequestType& request,
+                   ::grpc_impl::CompletionQueue* cq) {
+    return std::unique_ptr<
+        ::grpc_impl::ClientAsyncResponseReader<ResponseType>>(
+        grpc_impl::internal::ClientAsyncResponseReaderFactory<
+            ResponseType>::Create(channel_.get(), cq,
+                                  grpc::internal::RpcMethod(
+                                      method.c_str(),
+                                      grpc::internal::RpcMethod::NORMAL_RPC),
+                                  context, request, false));
+  }
+
+  /// DEPRECATED for multi-threaded use
+  /// Begin a call to a named method \a method using \a context.
+  /// A tag \a tag will be delivered to \a cq when the call has been started
+  /// (i.e, initial metadata has been sent).
+  /// The return value only indicates whether or not registration of the call
+  /// succeeded (i.e. the call won't proceed if the return value is nullptr).
+  std::unique_ptr<
+      ::grpc_impl::ClientAsyncReaderWriter<RequestType, ResponseType>>
+  Call(ClientContext* context, const std::string& method,
+       ::grpc_impl::CompletionQueue* cq, void* tag) {
+    return CallInternal(channel_.get(), context, method, cq, true, tag);
+  }
+
+#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+  /// Setup and start a unary call to a named method \a method using
+  /// \a context and specifying the \a request and \a response buffers.
+  void UnaryCall(ClientContext* context, const std::string& method,
+                 const RequestType* request, ResponseType* response,
+                 std::function<void(grpc::Status)> on_completion) {
+    UnaryCallInternal(context, method, request, response,
+                      std::move(on_completion));
+  }
+
+  /// Setup a unary call to a named method \a method using
+  /// \a context and specifying the \a request and \a response buffers.
+  /// Like any other reactor-based RPC, it will not be activated until
+  /// StartCall is invoked on its reactor.
+  void PrepareUnaryCall(ClientContext* context, const std::string& method,
+                        const RequestType* request, ResponseType* response,
+                        ::grpc_impl::ClientUnaryReactor* reactor) {
+    PrepareUnaryCallInternal(context, method, request, response, reactor);
+  }
+
+  /// Setup a call to a named method \a method using \a context and tied to
+  /// \a reactor . Like any other bidi streaming RPC, it will not be activated
+  /// until StartCall is invoked on its reactor.
+  void PrepareBidiStreamingCall(
+      ClientContext* context, const std::string& method,
+      ::grpc_impl::ClientBidiReactor<RequestType, ResponseType>* reactor) {
+    PrepareBidiStreamingCallInternal(context, method, reactor);
+  }
+#endif
+
+  /// NOTE: class experimental_type is not part of the public API of this class
+  /// TODO(vjpai): Move these contents to the public API of GenericStub when
+  ///              they are no longer experimental
+  class experimental_type {
+   public:
+    explicit experimental_type(TemplatedGenericStub* stub) : stub_(stub) {}
+
+    /// Setup and start a unary call to a named method \a method using
+    /// \a context and specifying the \a request and \a response buffers.
+    void UnaryCall(ClientContext* context, const std::string& method,
+                   const RequestType* request, ResponseType* response,
+                   std::function<void(grpc::Status)> on_completion) {
+      stub_->UnaryCallInternal(context, method, request, response,
+                               std::move(on_completion));
+    }
+
+    /// Setup a unary call to a named method \a method using
+    /// \a context and specifying the \a request and \a response buffers.
+    /// Like any other reactor-based RPC, it will not be activated until
+    /// StartCall is invoked on its reactor.
+    void PrepareUnaryCall(ClientContext* context, const std::string& method,
+                          const RequestType* request, ResponseType* response,
+                          ::grpc_impl::ClientUnaryReactor* reactor) {
+      stub_->PrepareUnaryCallInternal(context, method, request, response,
+                                      reactor);
+    }
+
+    /// Setup a call to a named method \a method using \a context and tied to
+    /// \a reactor . Like any other bidi streaming RPC, it will not be activated
+    /// until StartCall is invoked on its reactor.
+    void PrepareBidiStreamingCall(
+        ClientContext* context, const std::string& method,
+        ::grpc_impl::ClientBidiReactor<RequestType, ResponseType>* reactor) {
+      stub_->PrepareBidiStreamingCallInternal(context, method, reactor);
+    }
+
+   private:
+    TemplatedGenericStub* stub_;
+  };
+
+  /// NOTE: The function experimental() is not stable public API. It is a view
+  /// to the experimental components of this class. It may be changed or removed
+  /// at any time.
+  experimental_type experimental() { return experimental_type(this); }
+
+ private:
+  std::shared_ptr<grpc::ChannelInterface> channel_;
+
+  void UnaryCallInternal(ClientContext* context, const std::string& method,
+                         const RequestType* request, ResponseType* response,
+                         std::function<void(grpc::Status)> on_completion) {
+    ::grpc_impl::internal::CallbackUnaryCall(
+        channel_.get(),
+        grpc::internal::RpcMethod(method.c_str(),
+                                  grpc::internal::RpcMethod::NORMAL_RPC),
+        context, request, response, std::move(on_completion));
+  }
+
+  void PrepareUnaryCallInternal(ClientContext* context,
+                                const std::string& method,
+                                const RequestType* request,
+                                ResponseType* response,
+                                ::grpc_impl::ClientUnaryReactor* reactor) {
+    ::grpc_impl::internal::ClientCallbackUnaryFactory::Create<RequestType,
+                                                              ResponseType>(
+        channel_.get(),
+        grpc::internal::RpcMethod(method.c_str(),
+                                  grpc::internal::RpcMethod::NORMAL_RPC),
+        context, request, response, reactor);
+  }
+
+  void PrepareBidiStreamingCallInternal(
+      ClientContext* context, const std::string& method,
+      ::grpc_impl::ClientBidiReactor<RequestType, ResponseType>* reactor) {
+    ::grpc_impl::internal::
+        ClientCallbackReaderWriterFactory<RequestType, ResponseType>::Create(
+            channel_.get(),
+            grpc::internal::RpcMethod(
+                method.c_str(), grpc::internal::RpcMethod::BIDI_STREAMING),
+            context, reactor);
+  }
+
+  std::unique_ptr<
+      ::grpc_impl::ClientAsyncReaderWriter<RequestType, ResponseType>>
+  CallInternal(grpc::ChannelInterface* channel, ClientContext* context,
+               const std::string& method, ::grpc_impl::CompletionQueue* cq,
+               bool start, void* tag) {
+    return std::unique_ptr<
+        ::grpc_impl::ClientAsyncReaderWriter<RequestType, ResponseType>>(
+        ::grpc_impl::internal::
+            ClientAsyncReaderWriterFactory<RequestType, ResponseType>::Create(
+                channel, cq,
+                grpc::internal::RpcMethod(
+                    method.c_str(), grpc::internal::RpcMethod::BIDI_STREAMING),
+                context, start, tag));
+  }
+};
+
+typedef TemplatedGenericStub<grpc::ByteBuffer, grpc::ByteBuffer> GenericStub;
 
 }  // namespace grpc
 

+ 0 - 216
include/grpcpp/generic/generic_stub_impl.h

@@ -1,216 +0,0 @@
-/*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef GRPCPP_GENERIC_GENERIC_STUB_IMPL_H
-#define GRPCPP_GENERIC_GENERIC_STUB_IMPL_H
-
-#include <functional>
-
-#include <grpcpp/client_context.h>
-#include <grpcpp/impl/rpc_method.h>
-#include <grpcpp/support/async_stream_impl.h>
-#include <grpcpp/support/async_unary_call_impl.h>
-#include <grpcpp/support/byte_buffer.h>
-#include <grpcpp/support/client_callback_impl.h>
-#include <grpcpp/support/status.h>
-
-namespace grpc {
-
-typedef ::grpc_impl::ClientAsyncReaderWriter<ByteBuffer, ByteBuffer>
-    GenericClientAsyncReaderWriter;
-typedef ::grpc_impl::ClientAsyncResponseReader<ByteBuffer>
-    GenericClientAsyncResponseReader;
-}  // namespace grpc
-namespace grpc_impl {
-class CompletionQueue;
-
-/// Generic stubs provide a type-unaware interface to call gRPC methods
-/// by name. In practice, the Request and Response types should be basic
-/// types like grpc::ByteBuffer or proto::MessageLite (the base protobuf).
-template <class RequestType, class ResponseType>
-class TemplatedGenericStub final {
- public:
-  explicit TemplatedGenericStub(std::shared_ptr<grpc::ChannelInterface> channel)
-      : channel_(channel) {}
-
-  /// Setup a call to a named method \a method using \a context, but don't
-  /// start it. Let it be started explicitly with StartCall and a tag.
-  /// The return value only indicates whether or not registration of the call
-  /// succeeded (i.e. the call won't proceed if the return value is nullptr).
-  std::unique_ptr<ClientAsyncReaderWriter<RequestType, ResponseType>>
-  PrepareCall(ClientContext* context, const std::string& method,
-              CompletionQueue* cq) {
-    return CallInternal(channel_.get(), context, method, cq, false, nullptr);
-  }
-
-  /// Setup a unary call to a named method \a method using \a context, and don't
-  /// start it. Let it be started explicitly with StartCall.
-  /// The return value only indicates whether or not registration of the call
-  /// succeeded (i.e. the call won't proceed if the return value is nullptr).
-  std::unique_ptr<ClientAsyncResponseReader<ResponseType>> PrepareUnaryCall(
-      ClientContext* context, const std::string& method,
-      const RequestType& request, CompletionQueue* cq) {
-    return std::unique_ptr<ClientAsyncResponseReader<ResponseType>>(
-        internal::ClientAsyncResponseReaderFactory<ResponseType>::Create(
-            channel_.get(), cq,
-            grpc::internal::RpcMethod(method.c_str(),
-                                      grpc::internal::RpcMethod::NORMAL_RPC),
-            context, request, false));
-  }
-
-  /// DEPRECATED for multi-threaded use
-  /// Begin a call to a named method \a method using \a context.
-  /// A tag \a tag will be delivered to \a cq when the call has been started
-  /// (i.e, initial metadata has been sent).
-  /// The return value only indicates whether or not registration of the call
-  /// succeeded (i.e. the call won't proceed if the return value is nullptr).
-  std::unique_ptr<ClientAsyncReaderWriter<RequestType, ResponseType>> Call(
-      ClientContext* context, const std::string& method, CompletionQueue* cq,
-      void* tag) {
-    return CallInternal(channel_.get(), context, method, cq, true, tag);
-  }
-
-#ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
-  /// Setup and start a unary call to a named method \a method using
-  /// \a context and specifying the \a request and \a response buffers.
-  void UnaryCall(ClientContext* context, const std::string& method,
-                 const RequestType* request, ResponseType* response,
-                 std::function<void(grpc::Status)> on_completion) {
-    UnaryCallInternal(context, method, request, response,
-                      std::move(on_completion));
-  }
-
-  /// Setup a unary call to a named method \a method using
-  /// \a context and specifying the \a request and \a response buffers.
-  /// Like any other reactor-based RPC, it will not be activated until
-  /// StartCall is invoked on its reactor.
-  void PrepareUnaryCall(ClientContext* context, const std::string& method,
-                        const RequestType* request, ResponseType* response,
-                        ClientUnaryReactor* reactor) {
-    PrepareUnaryCallInternal(context, method, request, response, reactor);
-  }
-
-  /// Setup a call to a named method \a method using \a context and tied to
-  /// \a reactor . Like any other bidi streaming RPC, it will not be activated
-  /// until StartCall is invoked on its reactor.
-  void PrepareBidiStreamingCall(
-      ClientContext* context, const std::string& method,
-      ClientBidiReactor<RequestType, ResponseType>* reactor) {
-    PrepareBidiStreamingCallInternal(context, method, reactor);
-  }
-#endif
-
-  /// NOTE: class experimental_type is not part of the public API of this class
-  /// TODO(vjpai): Move these contents to the public API of GenericStub when
-  ///              they are no longer experimental
-  class experimental_type {
-   public:
-    explicit experimental_type(TemplatedGenericStub* stub) : stub_(stub) {}
-
-    /// Setup and start a unary call to a named method \a method using
-    /// \a context and specifying the \a request and \a response buffers.
-    void UnaryCall(ClientContext* context, const std::string& method,
-                   const RequestType* request, ResponseType* response,
-                   std::function<void(grpc::Status)> on_completion) {
-      stub_->UnaryCallInternal(context, method, request, response,
-                               std::move(on_completion));
-    }
-
-    /// Setup a unary call to a named method \a method using
-    /// \a context and specifying the \a request and \a response buffers.
-    /// Like any other reactor-based RPC, it will not be activated until
-    /// StartCall is invoked on its reactor.
-    void PrepareUnaryCall(ClientContext* context, const std::string& method,
-                          const RequestType* request, ResponseType* response,
-                          ClientUnaryReactor* reactor) {
-      stub_->PrepareUnaryCallInternal(context, method, request, response,
-                                      reactor);
-    }
-
-    /// Setup a call to a named method \a method using \a context and tied to
-    /// \a reactor . Like any other bidi streaming RPC, it will not be activated
-    /// until StartCall is invoked on its reactor.
-    void PrepareBidiStreamingCall(
-        ClientContext* context, const std::string& method,
-        ClientBidiReactor<RequestType, ResponseType>* reactor) {
-      stub_->PrepareBidiStreamingCallInternal(context, method, reactor);
-    }
-
-   private:
-    TemplatedGenericStub* stub_;
-  };
-
-  /// NOTE: The function experimental() is not stable public API. It is a view
-  /// to the experimental components of this class. It may be changed or removed
-  /// at any time.
-  experimental_type experimental() { return experimental_type(this); }
-
- private:
-  std::shared_ptr<grpc::ChannelInterface> channel_;
-
-  void UnaryCallInternal(ClientContext* context, const std::string& method,
-                         const RequestType* request, ResponseType* response,
-                         std::function<void(grpc::Status)> on_completion) {
-    internal::CallbackUnaryCall(
-        channel_.get(),
-        grpc::internal::RpcMethod(method.c_str(),
-                                  grpc::internal::RpcMethod::NORMAL_RPC),
-        context, request, response, std::move(on_completion));
-  }
-
-  void PrepareUnaryCallInternal(ClientContext* context,
-                                const std::string& method,
-                                const RequestType* request,
-                                ResponseType* response,
-                                ClientUnaryReactor* reactor) {
-    internal::ClientCallbackUnaryFactory::Create<RequestType, ResponseType>(
-        channel_.get(),
-        grpc::internal::RpcMethod(method.c_str(),
-                                  grpc::internal::RpcMethod::NORMAL_RPC),
-        context, request, response, reactor);
-  }
-
-  void PrepareBidiStreamingCallInternal(
-      ClientContext* context, const std::string& method,
-      ClientBidiReactor<RequestType, ResponseType>* reactor) {
-    internal::ClientCallbackReaderWriterFactory<RequestType, ResponseType>::
-        Create(channel_.get(),
-               grpc::internal::RpcMethod(
-                   method.c_str(), grpc::internal::RpcMethod::BIDI_STREAMING),
-               context, reactor);
-  }
-
-  std::unique_ptr<ClientAsyncReaderWriter<RequestType, ResponseType>>
-  CallInternal(grpc::ChannelInterface* channel, ClientContext* context,
-               const std::string& method, CompletionQueue* cq, bool start,
-               void* tag) {
-    return std::unique_ptr<ClientAsyncReaderWriter<RequestType, ResponseType>>(
-        internal::ClientAsyncReaderWriterFactory<RequestType, ResponseType>::
-            Create(
-                channel, cq,
-                grpc::internal::RpcMethod(
-                    method.c_str(), grpc::internal::RpcMethod::BIDI_STREAMING),
-                context, start, tag));
-  }
-};
-
-typedef TemplatedGenericStub<grpc::ByteBuffer, grpc::ByteBuffer> GenericStub;
-
-}  // namespace grpc_impl
-
-#endif  // GRPCPP_GENERIC_GENERIC_STUB_IMPL_H

+ 1 - 1
include/grpcpp/impl/codegen/call_op_set.h

@@ -549,7 +549,7 @@ class CallOpGenericRecvMessage {
   }
 
   void FinishOp(bool* status) {
-    if (!deserialize_ || hijacked_) return;
+    if (!deserialize_) return;
     if (recv_buf_.Valid()) {
       if (*status) {
         got_message = true;

+ 6 - 7
include/grpcpp/impl/codegen/client_context_impl.h

@@ -58,6 +58,7 @@ struct grpc_call;
 
 namespace grpc {
 
+class CallCredentials;
 class ChannelInterface;
 
 namespace internal {
@@ -88,7 +89,6 @@ class ClientCallbackUnaryImpl;
 class ClientContextAccessor;
 }  // namespace internal
 
-class CallCredentials;
 class Channel;
 class CompletionQueue;
 class ServerContext;
@@ -318,16 +318,15 @@ class ClientContext {
   ///
   /// It is legal to call this only before initial metadata is sent.
   ///
-  /// \see  https://grpc.io/docs/guides/auth
-  void set_credentials(
-      const std::shared_ptr<grpc_impl::CallCredentials>& creds);
+  /// \see  https://grpc.io/docs/guides/auth.html
+  void set_credentials(const std::shared_ptr<grpc::CallCredentials>& creds);
 
   /// EXPERIMENTAL debugging API
   ///
   /// Returns the credentials for the client call. This should be used only in
   /// tests and for diagnostic purposes, and should not be used by application
   /// logic.
-  std::shared_ptr<grpc_impl::CallCredentials> credentials() { return creds_; }
+  std::shared_ptr<grpc::CallCredentials> credentials() { return creds_; }
 
   /// Return the compression algorithm the client call will request be used.
   /// Note that the gRPC runtime may decide to ignore this request, for example,
@@ -494,8 +493,8 @@ class ClientContext {
   grpc_call* call_;
   bool call_canceled_;
   gpr_timespec deadline_;
-  std::string authority_;
-  std::shared_ptr<grpc_impl::CallCredentials> creds_;
+  grpc::string authority_;
+  std::shared_ptr<grpc::CallCredentials> creds_;
   mutable std::shared_ptr<const grpc::AuthContext> auth_context_;
   struct census_context* census_context_;
   std::multimap<std::string, std::string> send_initial_metadata_;

+ 2 - 2
include/grpcpp/impl/codegen/server_interface.h

@@ -36,12 +36,12 @@ namespace grpc_impl {
 class Channel;
 class CompletionQueue;
 class ServerCompletionQueue;
-class ServerCredentials;
 }  // namespace grpc_impl
 namespace grpc {
 
 class AsyncGenericService;
 class GenericServerContext;
+class ServerCredentials;
 class Service;
 
 extern CoreCodegenInterface* g_core_codegen_interface;
@@ -173,7 +173,7 @@ class ServerInterface : public internal::CallHook {
   ///
   /// \warning It's an error to call this method on an already started server.
   virtual int AddListeningPort(const std::string& addr,
-                               grpc_impl::ServerCredentials* creds) = 0;
+                               ServerCredentials* creds) = 0;
 
   /// Start the server.
   ///

+ 34 - 3
include/grpcpp/security/auth_metadata_processor.h

@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2019 gRPC authors.
+ * Copyright 2015 gRPC authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,11 +19,42 @@
 #ifndef GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_H
 #define GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_H
 
-#include <grpcpp/security/auth_metadata_processor_impl.h>
+#include <map>
+
+#include <grpcpp/security/auth_context.h>
+#include <grpcpp/support/status.h>
+#include <grpcpp/support/string_ref.h>
 
 namespace grpc {
 
-typedef ::grpc_impl::AuthMetadataProcessor AuthMetadataProcessor;
+/// Interface allowing custom server-side authorization based on credentials
+/// encoded in metadata.  Objects of this type can be passed to
+/// \a ServerCredentials::SetAuthMetadataProcessor().
+class AuthMetadataProcessor {
+ public:
+  typedef std::multimap<grpc::string_ref, grpc::string_ref> InputMetadata;
+  typedef std::multimap<std::string, std::string> OutputMetadata;
+
+  virtual ~AuthMetadataProcessor() {}
+
+  /// If this method returns true, the \a Process function will be scheduled in
+  /// a different thread from the one processing the call.
+  virtual bool IsBlocking() const { return true; }
+
+  /// context is read/write: it contains the properties of the channel peer and
+  /// it is the job of the Process method to augment it with properties derived
+  /// from the passed-in auth_metadata.
+  /// consumed_auth_metadata needs to be filled with metadata that has been
+  /// consumed by the processor and will be removed from the call.
+  /// response_metadata is the metadata that will be sent as part of the
+  /// response.
+  /// If the return value is not Status::OK, the rpc call will be aborted with
+  /// the error code and error message sent back to the client.
+  virtual grpc::Status Process(const InputMetadata& auth_metadata,
+                               grpc::AuthContext* context,
+                               OutputMetadata* consumed_auth_metadata,
+                               OutputMetadata* response_metadata) = 0;
+};
 
 }  // namespace grpc
 

+ 0 - 61
include/grpcpp/security/auth_metadata_processor_impl.h

@@ -1,61 +0,0 @@
-/*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_IMPL_H
-#define GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_IMPL_H
-
-#include <map>
-
-#include <grpcpp/security/auth_context.h>
-#include <grpcpp/support/status.h>
-#include <grpcpp/support/string_ref.h>
-
-namespace grpc_impl {
-
-/// Interface allowing custom server-side authorization based on credentials
-/// encoded in metadata.  Objects of this type can be passed to
-/// \a ServerCredentials::SetAuthMetadataProcessor().
-class AuthMetadataProcessor {
- public:
-  typedef std::multimap<grpc::string_ref, grpc::string_ref> InputMetadata;
-  typedef std::multimap<std::string, std::string> OutputMetadata;
-
-  virtual ~AuthMetadataProcessor() {}
-
-  /// If this method returns true, the \a Process function will be scheduled in
-  /// a different thread from the one processing the call.
-  virtual bool IsBlocking() const { return true; }
-
-  /// context is read/write: it contains the properties of the channel peer and
-  /// it is the job of the Process method to augment it with properties derived
-  /// from the passed-in auth_metadata.
-  /// consumed_auth_metadata needs to be filled with metadata that has been
-  /// consumed by the processor and will be removed from the call.
-  /// response_metadata is the metadata that will be sent as part of the
-  /// response.
-  /// If the return value is not Status::OK, the rpc call will be aborted with
-  /// the error code and error message sent back to the client.
-  virtual grpc::Status Process(const InputMetadata& auth_metadata,
-                               grpc::AuthContext* context,
-                               OutputMetadata* consumed_auth_metadata,
-                               OutputMetadata* response_metadata) = 0;
-};
-
-}  // namespace grpc_impl
-
-#endif  // GRPCPP_SECURITY_AUTH_METADATA_PROCESSOR_IMPL_H

+ 267 - 89
include/grpcpp/security/credentials.h

@@ -19,123 +19,301 @@
 #ifndef GRPCPP_SECURITY_CREDENTIALS_H
 #define GRPCPP_SECURITY_CREDENTIALS_H
 
-#include <grpcpp/security/credentials_impl.h>
+#include <map>
+#include <memory>
+#include <vector>
+
+#include <grpc/grpc_security_constants.h>
+#include <grpcpp/channel.h>
+#include <grpcpp/impl/codegen/client_interceptor.h>
+#include <grpcpp/impl/codegen/grpc_library.h>
+#include <grpcpp/security/auth_context.h>
+#include <grpcpp/security/tls_credentials_options.h>
+#include <grpcpp/support/channel_arguments.h>
+#include <grpcpp/support/status.h>
+#include <grpcpp/support/string_ref.h>
+
+struct grpc_call;
 
 namespace grpc {
+class CallCredentials;
+class SecureCallCredentials;
+class SecureChannelCredentials;
+class ChannelCredentials;
 
-typedef ::grpc_impl::ChannelCredentials ChannelCredentials;
-typedef ::grpc_impl::CallCredentials CallCredentials;
-typedef ::grpc_impl::SslCredentialsOptions SslCredentialsOptions;
-typedef ::grpc_impl::SecureCallCredentials SecureCallCredentials;
-typedef ::grpc_impl::SecureChannelCredentials SecureChannelCredentials;
-typedef ::grpc_impl::MetadataCredentialsPlugin MetadataCredentialsPlugin;
+std::shared_ptr<Channel> CreateCustomChannel(
+    const grpc::string& target,
+    const std::shared_ptr<grpc::ChannelCredentials>& creds,
+    const grpc::ChannelArguments& args);
 
-static inline std::shared_ptr<grpc_impl::ChannelCredentials>
-GoogleDefaultCredentials() {
-  return ::grpc_impl::GoogleDefaultCredentials();
+namespace experimental {
+std::shared_ptr<grpc::Channel> CreateCustomChannelWithInterceptors(
+    const grpc::string& target,
+    const std::shared_ptr<grpc::ChannelCredentials>& creds,
+    const grpc::ChannelArguments& args,
+    std::vector<
+        std::unique_ptr<grpc::experimental::ClientInterceptorFactoryInterface>>
+        interceptor_creators);
 }
 
-static inline std::shared_ptr<ChannelCredentials> SslCredentials(
-    const SslCredentialsOptions& options) {
-  return ::grpc_impl::SslCredentials(options);
-}
+/// A channel credentials object encapsulates all the state needed by a client
+/// to authenticate with a server for a given channel.
+/// It can make various assertions, e.g., about the client’s identity, role
+/// for all the calls on that channel.
+///
+/// \see https://grpc.io/docs/guides/auth.html
+class ChannelCredentials : private grpc::GrpcLibraryCodegen {
+ public:
+  ChannelCredentials();
+  ~ChannelCredentials();
 
-static inline std::shared_ptr<grpc_impl::CallCredentials>
-GoogleComputeEngineCredentials() {
-  return ::grpc_impl::GoogleComputeEngineCredentials();
-}
+ protected:
+  friend std::shared_ptr<ChannelCredentials> CompositeChannelCredentials(
+      const std::shared_ptr<ChannelCredentials>& channel_creds,
+      const std::shared_ptr<CallCredentials>& call_creds);
 
-/// Constant for maximum auth token lifetime.
-constexpr long kMaxAuthTokenLifetimeSecs =
-    ::grpc_impl::kMaxAuthTokenLifetimeSecs;
+  virtual SecureChannelCredentials* AsSecureCredentials() = 0;
 
-static inline std::shared_ptr<grpc_impl::CallCredentials>
-ServiceAccountJWTAccessCredentials(
-    const std::string& json_key,
-    long token_lifetime_seconds = grpc::kMaxAuthTokenLifetimeSecs) {
-  return ::grpc_impl::ServiceAccountJWTAccessCredentials(
-      json_key, token_lifetime_seconds);
-}
+ private:
+  friend std::shared_ptr<grpc::Channel> CreateCustomChannel(
+      const grpc::string& target,
+      const std::shared_ptr<grpc::ChannelCredentials>& creds,
+      const grpc::ChannelArguments& args);
 
-static inline std::shared_ptr<grpc_impl::CallCredentials>
-GoogleRefreshTokenCredentials(const std::string& json_refresh_token) {
-  return ::grpc_impl::GoogleRefreshTokenCredentials(json_refresh_token);
-}
+  friend std::shared_ptr<grpc::Channel>
+  grpc::experimental::CreateCustomChannelWithInterceptors(
+      const grpc::string& target,
+      const std::shared_ptr<grpc::ChannelCredentials>& creds,
+      const grpc::ChannelArguments& args,
+      std::vector<std::unique_ptr<
+          grpc::experimental::ClientInterceptorFactoryInterface>>
+          interceptor_creators);
 
-static inline std::shared_ptr<grpc_impl::CallCredentials>
-AccessTokenCredentials(const std::string& access_token) {
-  return ::grpc_impl::AccessTokenCredentials(access_token);
-}
+  virtual std::shared_ptr<Channel> CreateChannelImpl(
+      const grpc::string& target, const ChannelArguments& args) = 0;
 
-static inline std::shared_ptr<grpc_impl::CallCredentials> GoogleIAMCredentials(
-    const std::string& authorization_token,
-    const std::string& authority_selector) {
-  return ::grpc_impl::GoogleIAMCredentials(authorization_token,
-                                           authority_selector);
-}
+  // This function should have been a pure virtual function, but it is
+  // implemented as a virtual function so that it does not break API.
+  virtual std::shared_ptr<Channel> CreateChannelWithInterceptors(
+      const grpc::string& /*target*/, const ChannelArguments& /*args*/,
+      std::vector<std::unique_ptr<
+          grpc::experimental::ClientInterceptorFactoryInterface>>
+      /*interceptor_creators*/) {
+    return nullptr;
+  }
+};
+
+/// A call credentials object encapsulates the state needed by a client to
+/// authenticate with a server for a given call on a channel.
+///
+/// \see https://grpc.io/docs/guides/auth.html
+class CallCredentials : private grpc::GrpcLibraryCodegen {
+ public:
+  CallCredentials();
+  ~CallCredentials();
+
+  /// Apply this instance's credentials to \a call.
+  virtual bool ApplyToCall(grpc_call* call) = 0;
+  virtual grpc::string DebugString() {
+    return "CallCredentials did not provide a debug string";
+  }
+
+ protected:
+  friend std::shared_ptr<ChannelCredentials> CompositeChannelCredentials(
+      const std::shared_ptr<ChannelCredentials>& channel_creds,
+      const std::shared_ptr<CallCredentials>& call_creds);
+
+  friend std::shared_ptr<CallCredentials> CompositeCallCredentials(
+      const std::shared_ptr<CallCredentials>& creds1,
+      const std::shared_ptr<CallCredentials>& creds2);
+
+  virtual SecureCallCredentials* AsSecureCredentials() = 0;
+};
+
+/// Options used to build SslCredentials.
+struct SslCredentialsOptions {
+  /// The buffer containing the PEM encoding of the server root certificates. If
+  /// this parameter is empty, the default roots will be used.  The default
+  /// roots can be overridden using the \a GRPC_DEFAULT_SSL_ROOTS_FILE_PATH
+  /// environment variable pointing to a file on the file system containing the
+  /// roots.
+  grpc::string pem_root_certs;
+
+  /// The buffer containing the PEM encoding of the client's private key. This
+  /// parameter can be empty if the client does not have a private key.
+  grpc::string pem_private_key;
+
+  /// The buffer containing the PEM encoding of the client's certificate chain.
+  /// This parameter can be empty if the client does not have a certificate
+  /// chain.
+  grpc::string pem_cert_chain;
+};
+
+// Factories for building different types of Credentials The functions may
+// return empty shared_ptr when credentials cannot be created. If a
+// Credentials pointer is returned, it can still be invalid when used to create
+// a channel. A lame channel will be created then and all rpcs will fail on it.
+
+/// Builds credentials with reasonable defaults.
+///
+/// \warning Only use these credentials when connecting to a Google endpoint.
+/// Using these credentials to connect to any other service may result in this
+/// service being able to impersonate your client for requests to Google
+/// services.
+std::shared_ptr<ChannelCredentials> GoogleDefaultCredentials();
+
+/// Builds SSL Credentials given SSL specific options
+std::shared_ptr<ChannelCredentials> SslCredentials(
+    const SslCredentialsOptions& options);
+
+/// Builds credentials for use when running in GCE
+///
+/// \warning Only use these credentials when connecting to a Google endpoint.
+/// Using these credentials to connect to any other service may result in this
+/// service being able to impersonate your client for requests to Google
+/// services.
+std::shared_ptr<CallCredentials> GoogleComputeEngineCredentials();
 
-static inline std::shared_ptr<ChannelCredentials> CompositeChannelCredentials(
+constexpr long kMaxAuthTokenLifetimeSecs = 3600;
+
+/// Builds Service Account JWT Access credentials.
+/// json_key is the JSON key string containing the client's private key.
+/// token_lifetime_seconds is the lifetime in seconds of each Json Web Token
+/// (JWT) created with this credentials. It should not exceed
+/// \a kMaxAuthTokenLifetimeSecs or will be cropped to this value.
+std::shared_ptr<CallCredentials> ServiceAccountJWTAccessCredentials(
+    const grpc::string& json_key,
+    long token_lifetime_seconds = kMaxAuthTokenLifetimeSecs);
+
+/// Builds refresh token credentials.
+/// json_refresh_token is the JSON string containing the refresh token along
+/// with a client_id and client_secret.
+///
+/// \warning Only use these credentials when connecting to a Google endpoint.
+/// Using these credentials to connect to any other service may result in this
+/// service being able to impersonate your client for requests to Google
+/// services.
+std::shared_ptr<CallCredentials> GoogleRefreshTokenCredentials(
+    const grpc::string& json_refresh_token);
+
+/// Builds access token credentials.
+/// access_token is an oauth2 access token that was fetched using an out of band
+/// mechanism.
+///
+/// \warning Only use these credentials when connecting to a Google endpoint.
+/// Using these credentials to connect to any other service may result in this
+/// service being able to impersonate your client for requests to Google
+/// services.
+std::shared_ptr<CallCredentials> AccessTokenCredentials(
+    const grpc::string& access_token);
+
+/// Builds IAM credentials.
+///
+/// \warning Only use these credentials when connecting to a Google endpoint.
+/// Using these credentials to connect to any other service may result in this
+/// service being able to impersonate your client for requests to Google
+/// services.
+std::shared_ptr<CallCredentials> GoogleIAMCredentials(
+    const grpc::string& authorization_token,
+    const grpc::string& authority_selector);
+
+/// Combines a channel credentials and a call credentials into a composite
+/// channel credentials.
+std::shared_ptr<ChannelCredentials> CompositeChannelCredentials(
     const std::shared_ptr<ChannelCredentials>& channel_creds,
-    const std::shared_ptr<CallCredentials>& call_creds) {
-  return ::grpc_impl::CompositeChannelCredentials(channel_creds, call_creds);
-}
+    const std::shared_ptr<CallCredentials>& call_creds);
 
-static inline std::shared_ptr<grpc_impl::CallCredentials>
-CompositeCallCredentials(const std::shared_ptr<CallCredentials>& creds1,
-                         const std::shared_ptr<CallCredentials>& creds2) {
-  return ::grpc_impl::CompositeCallCredentials(creds1, creds2);
-}
+/// Combines two call credentials objects into a composite call credentials.
+std::shared_ptr<CallCredentials> CompositeCallCredentials(
+    const std::shared_ptr<CallCredentials>& creds1,
+    const std::shared_ptr<CallCredentials>& creds2);
 
-static inline std::shared_ptr<grpc_impl::ChannelCredentials>
-InsecureChannelCredentials() {
-  return ::grpc_impl::InsecureChannelCredentials();
-}
+/// Credentials for an unencrypted, unauthenticated channel
+std::shared_ptr<ChannelCredentials> InsecureChannelCredentials();
 
-typedef ::grpc_impl::MetadataCredentialsPlugin MetadataCredentialsPlugin;
+/// User defined metadata credentials.
+class MetadataCredentialsPlugin {
+ public:
+  virtual ~MetadataCredentialsPlugin() {}
 
-static inline std::shared_ptr<grpc_impl::CallCredentials>
-MetadataCredentialsFromPlugin(
-    std::unique_ptr<MetadataCredentialsPlugin> plugin) {
-  return ::grpc_impl::MetadataCredentialsFromPlugin(std::move(plugin));
-}
+  /// If this method returns true, the Process function will be scheduled in
+  /// a different thread from the one processing the call.
+  virtual bool IsBlocking() const { return true; }
+
+  /// Type of credentials this plugin is implementing.
+  virtual const char* GetType() const { return ""; }
+
+  /// Gets the auth metatada produced by this plugin.
+  /// The fully qualified method name is:
+  /// service_url + "/" + method_name.
+  /// The channel_auth_context contains (among other things), the identity of
+  /// the server.
+  virtual grpc::Status GetMetadata(
+      grpc::string_ref service_url, grpc::string_ref method_name,
+      const grpc::AuthContext& channel_auth_context,
+      std::multimap<grpc::string, grpc::string>* metadata) = 0;
+
+  virtual grpc::string DebugString() {
+    return "MetadataCredentialsPlugin did not provide a debug string";
+  }
+};
+
+std::shared_ptr<CallCredentials> MetadataCredentialsFromPlugin(
+    std::unique_ptr<MetadataCredentialsPlugin> plugin);
 
 namespace experimental {
 
-typedef ::grpc_impl::experimental::StsCredentialsOptions StsCredentialsOptions;
+/// Options for creating STS Oauth Token Exchange credentials following the IETF
+/// draft https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-16.
+/// Optional fields may be set to empty string. It is the responsibility of the
+/// caller to ensure that the subject and actor tokens are refreshed on disk at
+/// the specified paths.
+struct StsCredentialsOptions {
+  grpc::string token_exchange_service_uri;  // Required.
+  grpc::string resource;                    // Optional.
+  grpc::string audience;                    // Optional.
+  grpc::string scope;                       // Optional.
+  grpc::string requested_token_type;        // Optional.
+  grpc::string subject_token_path;          // Required.
+  grpc::string subject_token_type;          // Required.
+  grpc::string actor_token_path;            // Optional.
+  grpc::string actor_token_type;            // Optional.
+};
 
-static inline grpc::Status StsCredentialsOptionsFromJson(
-    const std::string& json_string, StsCredentialsOptions* options) {
-  return ::grpc_impl::experimental::StsCredentialsOptionsFromJson(json_string,
-                                                                  options);
-}
+grpc::Status StsCredentialsOptionsFromJson(const std::string& json_string,
+                                           StsCredentialsOptions* options);
 
-static inline grpc::Status StsCredentialsOptionsFromEnv(
-    StsCredentialsOptions* options) {
-  return grpc_impl::experimental::StsCredentialsOptionsFromEnv(options);
-}
+/// Creates STS credentials options from the $STS_CREDENTIALS environment
+/// variable. This environment variable points to the path of a JSON file
+/// comforming to the schema described above.
+grpc::Status StsCredentialsOptionsFromEnv(StsCredentialsOptions* options);
 
-static inline std::shared_ptr<grpc_impl::CallCredentials> StsCredentials(
-    const StsCredentialsOptions& options) {
-  return grpc_impl::experimental::StsCredentials(options);
-}
+std::shared_ptr<CallCredentials> StsCredentials(
+    const StsCredentialsOptions& options);
 
-typedef ::grpc_impl::experimental::AltsCredentialsOptions
-    AltsCredentialsOptions;
+std::shared_ptr<CallCredentials> MetadataCredentialsFromPlugin(
+    std::unique_ptr<MetadataCredentialsPlugin> plugin,
+    grpc_security_level min_security_level);
 
-static inline std::shared_ptr<grpc_impl::ChannelCredentials> AltsCredentials(
-    const AltsCredentialsOptions& options) {
-  return ::grpc_impl::experimental::AltsCredentials(options);
-}
+/// Options used to build AltsCredentials.
+struct AltsCredentialsOptions {
+  /// service accounts of target endpoint that will be acceptable
+  /// by the client. If service accounts are provided and none of them matches
+  /// that of the server, authentication will fail.
+  std::vector<grpc::string> target_service_accounts;
+};
 
-static inline std::shared_ptr<grpc_impl::ChannelCredentials> LocalCredentials(
-    grpc_local_connect_type type) {
-  return ::grpc_impl::experimental::LocalCredentials(type);
-}
+/// Builds ALTS Credentials given ALTS specific options
+std::shared_ptr<ChannelCredentials> AltsCredentials(
+    const AltsCredentialsOptions& options);
 
-static inline std::shared_ptr<grpc_impl::ChannelCredentials> TlsCredentials(
-    const ::grpc_impl::experimental::TlsCredentialsOptions& options) {
-  return ::grpc_impl::experimental::TlsCredentials(options);
-}
+/// Builds Local Credentials.
+std::shared_ptr<ChannelCredentials> LocalCredentials(
+    grpc_local_connect_type type);
+
+/// Builds TLS Credentials given TLS options.
+std::shared_ptr<ChannelCredentials> TlsCredentials(
+    const TlsCredentialsOptions& options);
 
 }  // namespace experimental
 }  // namespace grpc

+ 0 - 356
include/grpcpp/security/credentials_impl.h

@@ -1,356 +0,0 @@
-/*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef GRPCPP_SECURITY_CREDENTIALS_IMPL_H
-#define GRPCPP_SECURITY_CREDENTIALS_IMPL_H
-
-#include <map>
-#include <memory>
-#include <vector>
-
-#include <grpc/grpc_security_constants.h>
-#include <grpcpp/channel_impl.h>
-#include <grpcpp/impl/codegen/client_interceptor.h>
-#include <grpcpp/impl/codegen/grpc_library.h>
-#include <grpcpp/security/auth_context.h>
-#include <grpcpp/security/tls_credentials_options.h>
-#include <grpcpp/support/channel_arguments_impl.h>
-#include <grpcpp/support/status.h>
-#include <grpcpp/support/string_ref.h>
-
-struct grpc_call;
-
-namespace grpc_impl {
-
-class ChannelCredentials;
-class CallCredentials;
-class SecureCallCredentials;
-class SecureChannelCredentials;
-
-std::shared_ptr<Channel> CreateCustomChannelImpl(
-    const std::string& target, const std::shared_ptr<ChannelCredentials>& creds,
-    const ChannelArguments& args);
-
-namespace experimental {
-std::shared_ptr<Channel> CreateCustomChannelWithInterceptors(
-    const std::string& target, const std::shared_ptr<ChannelCredentials>& creds,
-    const ChannelArguments& args,
-    std::vector<
-        std::unique_ptr<grpc::experimental::ClientInterceptorFactoryInterface>>
-        interceptor_creators);
-}
-
-/// A channel credentials object encapsulates all the state needed by a client
-/// to authenticate with a server for a given channel.
-/// It can make various assertions, e.g., about the client’s identity, role
-/// for all the calls on that channel.
-///
-/// \see https://grpc.io/docs/guides/auth
-class ChannelCredentials : private grpc::GrpcLibraryCodegen {
- public:
-  ChannelCredentials();
-  ~ChannelCredentials();
-
- protected:
-  friend std::shared_ptr<ChannelCredentials> CompositeChannelCredentials(
-      const std::shared_ptr<ChannelCredentials>& channel_creds,
-      const std::shared_ptr<CallCredentials>& call_creds);
-
-  virtual SecureChannelCredentials* AsSecureCredentials() = 0;
-
- private:
-  friend std::shared_ptr<Channel> CreateCustomChannelImpl(
-      const std::string& target,
-      const std::shared_ptr<ChannelCredentials>& creds,
-      const ChannelArguments& args);
-
-  friend std::shared_ptr<Channel>
-  grpc_impl::experimental::CreateCustomChannelWithInterceptors(
-      const std::string& target,
-      const std::shared_ptr<ChannelCredentials>& creds,
-      const ChannelArguments& args,
-      std::vector<std::unique_ptr<
-          grpc::experimental::ClientInterceptorFactoryInterface>>
-          interceptor_creators);
-
-  virtual std::shared_ptr<Channel> CreateChannelImpl(
-      const std::string& target, const ChannelArguments& args) = 0;
-
-  // This function should have been a pure virtual function, but it is
-  // implemented as a virtual function so that it does not break API.
-  virtual std::shared_ptr<Channel> CreateChannelWithInterceptors(
-      const std::string& /*target*/, const ChannelArguments& /*args*/,
-      std::vector<std::unique_ptr<
-          grpc::experimental::ClientInterceptorFactoryInterface>>
-      /*interceptor_creators*/) {
-    return nullptr;
-  }
-};
-
-/// A call credentials object encapsulates the state needed by a client to
-/// authenticate with a server for a given call on a channel.
-///
-/// \see https://grpc.io/docs/guides/auth
-class CallCredentials : private grpc::GrpcLibraryCodegen {
- public:
-  CallCredentials();
-  ~CallCredentials();
-
-  /// Apply this instance's credentials to \a call.
-  virtual bool ApplyToCall(grpc_call* call) = 0;
-  virtual std::string DebugString() {
-    return "CallCredentials did not provide a debug string";
-  }
-
- protected:
-  friend std::shared_ptr<ChannelCredentials> CompositeChannelCredentials(
-      const std::shared_ptr<ChannelCredentials>& channel_creds,
-      const std::shared_ptr<CallCredentials>& call_creds);
-
-  friend std::shared_ptr<CallCredentials> CompositeCallCredentials(
-      const std::shared_ptr<CallCredentials>& creds1,
-      const std::shared_ptr<CallCredentials>& creds2);
-
-  virtual SecureCallCredentials* AsSecureCredentials() = 0;
-};
-
-/// Options used to build SslCredentials.
-struct SslCredentialsOptions {
-  /// The buffer containing the PEM encoding of the server root certificates. If
-  /// this parameter is empty, the default roots will be used.  The default
-  /// roots can be overridden using the \a GRPC_DEFAULT_SSL_ROOTS_FILE_PATH
-  /// environment variable pointing to a file on the file system containing the
-  /// roots.
-  std::string pem_root_certs;
-
-  /// The buffer containing the PEM encoding of the client's private key. This
-  /// parameter can be empty if the client does not have a private key.
-  std::string pem_private_key;
-
-  /// The buffer containing the PEM encoding of the client's certificate chain.
-  /// This parameter can be empty if the client does not have a certificate
-  /// chain.
-  std::string pem_cert_chain;
-};
-
-// Factories for building different types of Credentials The functions may
-// return empty shared_ptr when credentials cannot be created. If a
-// Credentials pointer is returned, it can still be invalid when used to create
-// a channel. A lame channel will be created then and all rpcs will fail on it.
-
-/// Builds credentials with reasonable defaults.
-///
-/// \warning Only use these credentials when connecting to a Google endpoint.
-/// Using these credentials to connect to any other service may result in this
-/// service being able to impersonate your client for requests to Google
-/// services.
-std::shared_ptr<ChannelCredentials> GoogleDefaultCredentials();
-
-/// Builds SSL Credentials given SSL specific options
-std::shared_ptr<ChannelCredentials> SslCredentials(
-    const SslCredentialsOptions& options);
-
-/// Builds credentials for use when running in GCE
-///
-/// \warning Only use these credentials when connecting to a Google endpoint.
-/// Using these credentials to connect to any other service may result in this
-/// service being able to impersonate your client for requests to Google
-/// services.
-std::shared_ptr<CallCredentials> GoogleComputeEngineCredentials();
-
-constexpr long kMaxAuthTokenLifetimeSecs = 3600;
-
-/// Builds Service Account JWT Access credentials.
-/// json_key is the JSON key string containing the client's private key.
-/// token_lifetime_seconds is the lifetime in seconds of each Json Web Token
-/// (JWT) created with this credentials. It should not exceed
-/// \a kMaxAuthTokenLifetimeSecs or will be cropped to this value.
-std::shared_ptr<CallCredentials> ServiceAccountJWTAccessCredentials(
-    const std::string& json_key,
-    long token_lifetime_seconds = grpc_impl::kMaxAuthTokenLifetimeSecs);
-
-/// Builds refresh token credentials.
-/// json_refresh_token is the JSON string containing the refresh token along
-/// with a client_id and client_secret.
-///
-/// \warning Only use these credentials when connecting to a Google endpoint.
-/// Using these credentials to connect to any other service may result in this
-/// service being able to impersonate your client for requests to Google
-/// services.
-std::shared_ptr<CallCredentials> GoogleRefreshTokenCredentials(
-    const std::string& json_refresh_token);
-
-/// Builds access token credentials.
-/// access_token is an oauth2 access token that was fetched using an out of band
-/// mechanism.
-///
-/// \warning Only use these credentials when connecting to a Google endpoint.
-/// Using these credentials to connect to any other service may result in this
-/// service being able to impersonate your client for requests to Google
-/// services.
-std::shared_ptr<CallCredentials> AccessTokenCredentials(
-    const std::string& access_token);
-
-/// Builds IAM credentials.
-///
-/// \warning Only use these credentials when connecting to a Google endpoint.
-/// Using these credentials to connect to any other service may result in this
-/// service being able to impersonate your client for requests to Google
-/// services.
-std::shared_ptr<CallCredentials> GoogleIAMCredentials(
-    const std::string& authorization_token,
-    const std::string& authority_selector);
-
-/// Combines a channel credentials and a call credentials into a composite
-/// channel credentials.
-std::shared_ptr<ChannelCredentials> CompositeChannelCredentials(
-    const std::shared_ptr<ChannelCredentials>& channel_creds,
-    const std::shared_ptr<CallCredentials>& call_creds);
-
-/// Combines two call credentials objects into a composite call credentials.
-std::shared_ptr<CallCredentials> CompositeCallCredentials(
-    const std::shared_ptr<CallCredentials>& creds1,
-    const std::shared_ptr<CallCredentials>& creds2);
-
-/// Credentials for an unencrypted, unauthenticated channel
-std::shared_ptr<ChannelCredentials> InsecureChannelCredentials();
-
-/// User defined metadata credentials.
-class MetadataCredentialsPlugin {
- public:
-  virtual ~MetadataCredentialsPlugin() {}
-
-  /// If this method returns true, the Process function will be scheduled in
-  /// a different thread from the one processing the call.
-  virtual bool IsBlocking() const { return true; }
-
-  /// Type of credentials this plugin is implementing.
-  virtual const char* GetType() const { return ""; }
-
-  /// Gets the auth metatada produced by this plugin.
-  /// The fully qualified method name is:
-  /// service_url + "/" + method_name.
-  /// The channel_auth_context contains (among other things), the identity of
-  /// the server.
-  virtual grpc::Status GetMetadata(
-      grpc::string_ref service_url, grpc::string_ref method_name,
-      const grpc::AuthContext& channel_auth_context,
-      std::multimap<std::string, std::string>* metadata) = 0;
-
-  virtual std::string DebugString() {
-    return "MetadataCredentialsPlugin did not provide a debug string";
-  }
-};
-
-std::shared_ptr<CallCredentials> MetadataCredentialsFromPlugin(
-    std::unique_ptr<MetadataCredentialsPlugin> plugin);
-
-namespace experimental {
-
-/// Options for creating STS Oauth Token Exchange credentials following the IETF
-/// draft https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-16.
-/// Optional fields may be set to empty string. It is the responsibility of the
-/// caller to ensure that the subject and actor tokens are refreshed on disk at
-/// the specified paths.
-struct StsCredentialsOptions {
-  std::string token_exchange_service_uri;  // Required.
-  std::string resource;                    // Optional.
-  std::string audience;                    // Optional.
-  std::string scope;                       // Optional.
-  std::string requested_token_type;        // Optional.
-  std::string subject_token_path;          // Required.
-  std::string subject_token_type;          // Required.
-  std::string actor_token_path;            // Optional.
-  std::string actor_token_type;            // Optional.
-};
-
-/// Creates STS Options from a JSON string. The JSON schema is as follows:
-/// {
-///   "title": "STS Credentials Config",
-///   "type": "object",
-///   "required": ["token_exchange_service_uri", "subject_token_path",
-///                "subject_token_type"],
-///    "properties": {
-///      "token_exchange_service_uri": {
-///        "type": "string"
-///     },
-///     "resource": {
-///       "type": "string"
-///     },
-///     "audience": {
-///       "type": "string"
-///     },
-///     "scope": {
-///       "type": "string"
-///     },
-///     "requested_token_type": {
-///       "type": "string"
-///     },
-///     "subject_token_path": {
-///       "type": "string"
-///     },
-///     "subject_token_type": {
-///     "type": "string"
-///     },
-///     "actor_token_path" : {
-///       "type": "string"
-///     },
-///     "actor_token_type": {
-///       "type": "string"
-///     }
-///   }
-/// }
-grpc::Status StsCredentialsOptionsFromJson(const std::string& json_string,
-                                           StsCredentialsOptions* options);
-
-/// Creates STS credentials options from the $STS_CREDENTIALS environment
-/// variable. This environment variable points to the path of a JSON file
-/// comforming to the schema described above.
-grpc::Status StsCredentialsOptionsFromEnv(StsCredentialsOptions* options);
-
-std::shared_ptr<CallCredentials> StsCredentials(
-    const StsCredentialsOptions& options);
-
-std::shared_ptr<CallCredentials> MetadataCredentialsFromPlugin(
-    std::unique_ptr<MetadataCredentialsPlugin> plugin,
-    grpc_security_level min_security_level);
-
-/// Options used to build AltsCredentials.
-struct AltsCredentialsOptions {
-  /// service accounts of target endpoint that will be acceptable
-  /// by the client. If service accounts are provided and none of them matches
-  /// that of the server, authentication will fail.
-  std::vector<std::string> target_service_accounts;
-};
-
-/// Builds ALTS Credentials given ALTS specific options
-std::shared_ptr<ChannelCredentials> AltsCredentials(
-    const AltsCredentialsOptions& options);
-
-/// Builds Local Credentials.
-std::shared_ptr<ChannelCredentials> LocalCredentials(
-    grpc_local_connect_type type);
-
-/// Builds TLS Credentials given TLS options.
-std::shared_ptr<ChannelCredentials> TlsCredentials(
-    const TlsCredentialsOptions& options);
-
-}  // namespace experimental
-}  // namespace grpc_impl
-
-#endif  // GRPCPP_SECURITY_CREDENTIALS_IMPL_H

+ 1 - 4
include/grpcpp/security/cronet_credentials.h

@@ -23,10 +23,7 @@
 
 namespace grpc {
 
-static inline std::shared_ptr<grpc_impl::ChannelCredentials>
-CronetChannelCredentials(void* engine) {
-  return ::grpc_impl::CronetChannelCredentials(engine);
-}
+std::shared_ptr<ChannelCredentials> CronetChannelCredentials(void* engine);
 
 }  // namespace grpc
 

+ 50 - 25
include/grpcpp/security/server_credentials.h

@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2019 gRPC authors.
+ * Copyright 2015 gRPC authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,15 @@
 #ifndef GRPCPP_SECURITY_SERVER_CREDENTIALS_H
 #define GRPCPP_SECURITY_SERVER_CREDENTIALS_H
 
-#include <grpcpp/security/server_credentials_impl.h>
+#include <memory>
+#include <vector>
+
+#include <grpc/grpc_security_constants.h>
+#include <grpcpp/security/auth_metadata_processor.h>
+#include <grpcpp/security/tls_credentials_options.h>
+#include <grpcpp/support/config.h>
+
+struct grpc_server;
 
 namespace grpc_impl {
 
@@ -27,8 +35,6 @@ class Server;
 }  // namespace grpc_impl
 namespace grpc {
 
-typedef ::grpc_impl::ServerCredentials ServerCredentials;
-
 /// Options to create ServerCredentials with SSL
 struct SslServerCredentialsOptions {
   /// \warning Deprecated
@@ -55,35 +61,54 @@ struct SslServerCredentialsOptions {
   grpc_ssl_client_certificate_request_type client_certificate_request;
 };
 
-static inline std::shared_ptr<ServerCredentials> SslServerCredentials(
-    const SslServerCredentialsOptions& options) {
-  return ::grpc_impl::SslServerCredentials(options);
-}
+/// Wrapper around \a grpc_server_credentials, a way to authenticate a server.
+class ServerCredentials {
+ public:
+  virtual ~ServerCredentials();
+
+  /// This method is not thread-safe and has to be called before the server is
+  /// started. The last call to this function wins.
+  virtual void SetAuthMetadataProcessor(
+      const std::shared_ptr<grpc::AuthMetadataProcessor>& processor) = 0;
+
+ private:
+  friend class ::grpc_impl::Server;
+
+  /// Tries to bind \a server to the given \a addr (eg, localhost:1234,
+  /// 192.168.1.1:31416, [::1]:27182, etc.)
+  ///
+  /// \return bound port number on success, 0 on failure.
+  // TODO(dgq): the "port" part seems to be a misnomer.
+  virtual int AddPortToServer(const std::string& addr, grpc_server* server) = 0;
+};
 
-static inline std::shared_ptr<ServerCredentials> InsecureServerCredentials() {
-  return ::grpc_impl::InsecureServerCredentials();
-}
+/// Builds SSL ServerCredentials given SSL specific options
+std::shared_ptr<ServerCredentials> SslServerCredentials(
+    const grpc::SslServerCredentialsOptions& options);
+
+std::shared_ptr<ServerCredentials> InsecureServerCredentials();
 
 namespace experimental {
 
-typedef ::grpc_impl::experimental::AltsServerCredentialsOptions
-    AltsServerCredentialsOptions;
+/// Options to create ServerCredentials with ALTS
+struct AltsServerCredentialsOptions {
+  /// Add fields if needed.
+};
+
+/// Builds ALTS ServerCredentials given ALTS specific options
+std::shared_ptr<ServerCredentials> AltsServerCredentials(
+    const AltsServerCredentialsOptions& options);
 
-static inline std::shared_ptr<ServerCredentials> AltsServerCredentials(
-    const AltsServerCredentialsOptions& options) {
-  return ::grpc_impl::experimental::AltsServerCredentials(options);
-}
+/// Builds Local ServerCredentials.
+std::shared_ptr<ServerCredentials> AltsServerCredentials(
+    const AltsServerCredentialsOptions& options);
 
-static inline std::shared_ptr<ServerCredentials> LocalServerCredentials(
-    grpc_local_connect_type type) {
-  return ::grpc_impl::experimental::LocalServerCredentials(type);
-}
+std::shared_ptr<ServerCredentials> LocalServerCredentials(
+    grpc_local_connect_type type);
 
 /// Builds TLS ServerCredentials given TLS options.
-static inline std::shared_ptr<ServerCredentials> TlsServerCredentials(
-    const ::grpc_impl::experimental::TlsCredentialsOptions& options) {
-  return ::grpc_impl::experimental::TlsServerCredentials(options);
-}
+std::shared_ptr<ServerCredentials> TlsServerCredentials(
+    const experimental::TlsCredentialsOptions& options);
 
 }  // namespace experimental
 }  // namespace grpc

+ 0 - 89
include/grpcpp/security/server_credentials_impl.h

@@ -1,89 +0,0 @@
-/*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef GRPCPP_SECURITY_SERVER_CREDENTIALS_IMPL_H
-#define GRPCPP_SECURITY_SERVER_CREDENTIALS_IMPL_H
-
-#include <memory>
-#include <vector>
-
-#include <grpc/grpc_security_constants.h>
-#include <grpcpp/security/auth_metadata_processor.h>
-#include <grpcpp/security/tls_credentials_options.h>
-#include <grpcpp/support/config.h>
-
-struct grpc_server;
-
-namespace grpc {
-
-struct SslServerCredentialsOptions;
-}  // namespace grpc
-namespace grpc_impl {
-class Server;
-
-/// Wrapper around \a grpc_server_credentials, a way to authenticate a server.
-class ServerCredentials {
- public:
-  virtual ~ServerCredentials();
-
-  /// This method is not thread-safe and has to be called before the server is
-  /// started. The last call to this function wins.
-  virtual void SetAuthMetadataProcessor(
-      const std::shared_ptr<grpc::AuthMetadataProcessor>& processor) = 0;
-
- private:
-  friend class ::grpc_impl::Server;
-
-  /// Tries to bind \a server to the given \a addr (eg, localhost:1234,
-  /// 192.168.1.1:31416, [::1]:27182, etc.)
-  ///
-  /// \return bound port number on success, 0 on failure.
-  // TODO(dgq): the "port" part seems to be a misnomer.
-  virtual int AddPortToServer(const std::string& addr, grpc_server* server) = 0;
-};
-
-/// Builds SSL ServerCredentials given SSL specific options
-std::shared_ptr<ServerCredentials> SslServerCredentials(
-    const grpc::SslServerCredentialsOptions& options);
-
-/// Builds insecure server credentials.
-std::shared_ptr<ServerCredentials> InsecureServerCredentials();
-
-namespace experimental {
-
-/// Options to create ServerCredentials with ALTS
-struct AltsServerCredentialsOptions {
-  /// Add fields if needed.
-};
-
-/// Builds ALTS ServerCredentials given ALTS specific options
-std::shared_ptr<ServerCredentials> AltsServerCredentials(
-    const AltsServerCredentialsOptions& options);
-
-/// Builds Local ServerCredentials.
-std::shared_ptr<ServerCredentials> LocalServerCredentials(
-    grpc_local_connect_type type);
-
-/// Builds TLS ServerCredentials given TLS options.
-std::shared_ptr<ServerCredentials> TlsServerCredentials(
-    const TlsCredentialsOptions& options);
-
-}  // namespace experimental
-}  // namespace grpc_impl
-
-#endif  // GRPCPP_SECURITY_SERVER_CREDENTIALS_IMPL_H

+ 2 - 2
include/grpcpp/security/tls_credentials_options.h

@@ -36,7 +36,7 @@ typedef struct grpc_tls_server_authorization_check_config
     grpc_tls_server_authorization_check_config;
 typedef struct grpc_tls_credentials_options grpc_tls_credentials_options;
 
-namespace grpc_impl {
+namespace grpc {
 namespace experimental {
 
 /** TLS key materials config, wrapper for grpc_tls_key_materials_config. It is
@@ -340,6 +340,6 @@ class TlsCredentialsOptions {
 };
 
 }  // namespace experimental
-}  // namespace grpc_impl
+}  // namespace grpc
 
 #endif  // GRPCPP_SECURITY_TLS_CREDENTIALS_OPTIONS_H

+ 4 - 4
include/grpcpp/server_builder.h

@@ -43,12 +43,12 @@ namespace grpc_impl {
 class CompletionQueue;
 class Server;
 class ServerCompletionQueue;
-class ServerCredentials;
 }  // namespace grpc_impl
 
 namespace grpc {
 
 class AsyncGenericService;
+class ServerCredentials;
 class Service;
 namespace testing {
 class ServerBuilderPluginTest;
@@ -130,7 +130,7 @@ class ServerBuilder {
   /// does not modify this pointer.
   ServerBuilder& AddListeningPort(
       const std::string& addr_uri,
-      std::shared_ptr<grpc_impl::ServerCredentials> creds,
+      std::shared_ptr<grpc::ServerCredentials> creds,
       int* selected_port = nullptr);
 
   /// Add a completion queue for handling asynchronous services.
@@ -312,7 +312,7 @@ class ServerBuilder {
   /// Experimental, to be deprecated
   struct Port {
     std::string addr;
-    std::shared_ptr<grpc_impl::ServerCredentials> creds;
+    std::shared_ptr<ServerCredentials> creds;
     int* selected_port;
   };
 
@@ -380,7 +380,7 @@ class ServerBuilder {
   /// List of completion queues added via \a AddCompletionQueue method.
   std::vector<grpc_impl::ServerCompletionQueue*> cqs_;
 
-  std::shared_ptr<grpc_impl::ServerCredentials> creds_;
+  std::shared_ptr<grpc::ServerCredentials> creds_;
   std::vector<std::unique_ptr<grpc::ServerBuilderPlugin>> plugins_;
   grpc_resource_quota* resource_quota_;
   grpc::AsyncGenericService* generic_service_{nullptr};

+ 4 - 4
include/grpcpp/server_builder_impl.h

@@ -43,13 +43,13 @@ namespace grpc_impl {
 class CompletionQueue;
 class Server;
 class ServerCompletionQueue;
-class ServerCredentials;
 }  // namespace grpc_impl
 
 namespace grpc {
 
 class AsyncGenericService;
 class ResourceQuota;
+class ServerCredentials;
 class Service;
 namespace testing {
 class ServerBuilderPluginTest;
@@ -134,7 +134,7 @@ class ServerBuilder {
   /// does not modify this pointer.
   ServerBuilder& AddListeningPort(
       const std::string& addr_uri,
-      std::shared_ptr<grpc_impl::ServerCredentials> creds,
+      std::shared_ptr<grpc::ServerCredentials> creds,
       int* selected_port = nullptr);
 
   /// Add a completion queue for handling asynchronous services.
@@ -317,7 +317,7 @@ class ServerBuilder {
   /// Experimental, to be deprecated
   struct Port {
     std::string addr;
-    std::shared_ptr<grpc_impl::ServerCredentials> creds;
+    std::shared_ptr<grpc::ServerCredentials> creds;
     int* selected_port;
   };
 
@@ -385,7 +385,7 @@ class ServerBuilder {
   /// List of completion queues added via \a AddCompletionQueue method.
   std::vector<grpc_impl::ServerCompletionQueue*> cqs_;
 
-  std::shared_ptr<grpc_impl::ServerCredentials> creds_;
+  std::shared_ptr<grpc::ServerCredentials> creds_;
   std::vector<std::unique_ptr<grpc::ServerBuilderPlugin>> plugins_;
   grpc_resource_quota* resource_quota_;
   grpc::AsyncGenericService* generic_service_{nullptr};

+ 2 - 3
include/grpcpp/support/channel_arguments_impl.h

@@ -28,6 +28,7 @@
 #include <grpcpp/support/config.h>
 
 namespace grpc {
+class SecureChannelCredentials;
 namespace testing {
 class ChannelArgumentsTest;
 }  // namespace testing
@@ -35,8 +36,6 @@ class ChannelArgumentsTest;
 
 namespace grpc_impl {
 
-class SecureChannelCredentials;
-
 /// Options for channel creation. The user can use generic setters to pass
 /// key value pairs down to C channel creation code. For gRPC related options,
 /// concrete setters are provided.
@@ -126,7 +125,7 @@ class ChannelArguments {
   }
 
  private:
-  friend class grpc_impl::SecureChannelCredentials;
+  friend class grpc::SecureChannelCredentials;
   friend class grpc::testing::ChannelArgumentsTest;
 
   /// Default pointer argument operations.

+ 14 - 10
include/grpcpp/support/error_details.h

@@ -19,7 +19,7 @@
 #ifndef GRPCPP_SUPPORT_ERROR_DETAILS_H
 #define GRPCPP_SUPPORT_ERROR_DETAILS_H
 
-#include <grpcpp/support/error_details_impl.h>
+#include <grpcpp/support/status.h>
 
 namespace google {
 namespace rpc {
@@ -29,15 +29,19 @@ class Status;
 
 namespace grpc {
 
-static inline Status ExtractErrorDetails(const Status& from,
-                                         ::google::rpc::Status* to) {
-  return ::grpc_impl::ExtractErrorDetails(from, to);
-}
-
-static inline Status SetErrorDetails(const ::google::rpc::Status& from,
-                                     Status* to) {
-  return ::grpc_impl::SetErrorDetails(from, to);
-}
+/// Map a \a grpc::Status to a \a google::rpc::Status.
+/// The given \a to object will be cleared.
+/// On success, returns status with OK.
+/// Returns status with \a INVALID_ARGUMENT, if failed to deserialize.
+/// Returns status with \a FAILED_PRECONDITION, if \a to is nullptr.
+grpc::Status ExtractErrorDetails(const grpc::Status& from,
+                                 ::google::rpc::Status* to);
+
+/// Map \a google::rpc::Status to a \a grpc::Status.
+/// Returns OK on success.
+/// Returns status with \a FAILED_PRECONDITION if \a to is nullptr.
+grpc::Status SetErrorDetails(const ::google::rpc::Status& from,
+                             grpc::Status* to);
 
 }  // namespace grpc
 

+ 207 - 247
package.xml

@@ -13,8 +13,8 @@
  <date>2019-09-24</date>
  <time>16:06:07</time>
  <version>
-  <release>1.31.0dev</release>
-  <api>1.31.0dev</api>
+  <release>1.32.0dev</release>
+  <api>1.32.0dev</api>
  </version>
  <stability>
   <release>beta</release>
@@ -22,7 +22,7 @@
  </stability>
  <license>Apache 2.0</license>
  <notes>
-- gRPC Core 1.31.0 update
+- gRPC Core 1.32.0 update
  </notes>
  <contents>
   <dir baseinstalldir="/" name="/">
@@ -285,256 +285,126 @@
     <file baseinstalldir="/" name="src/core/ext/transport/inproc/inproc_transport.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/annotations/deprecation.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/annotations/resource.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/annotations/resource.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/annotations/resource.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/cert.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/common.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/secret.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/auth/tls.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cds.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cds.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cds.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/address.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/backoff.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/base.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/config_source.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/health_check.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/protocol.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/discovery.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/eds.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/eds.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/eds.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/lds.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/lds.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/lds.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/listener.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/rds.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/rds.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/rds.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route/route.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/route/route_components.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/scoped_route.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/srds.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/srds.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/api/v2/srds.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/http.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/http.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/http.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/http.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/regex.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/string.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/string.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/string.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/percent.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/percent.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/percent.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/percent.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/range.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/range.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/range.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/range.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/semantic_version.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/semantic_version.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/semantic_version.upbdefs.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upbdefs.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/v3/http.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/v3/http.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/v3/percent.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/v3/percent.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/v3/range.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/v3/range.upb.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/gogoproto/gogo.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/gogoproto/gogo.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/gogoproto/gogo.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/gogoproto/gogo.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/annotations.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/annotations.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/annotations.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/annotations.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/http.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/http.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/http.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/api/http.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/any.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/any.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/any.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/any.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/descriptor.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/descriptor.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/descriptor.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/duration.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/duration.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/duration.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/duration.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/empty.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/empty.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/empty.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/empty.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/struct.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/struct.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/struct.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/struct.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/timestamp.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/timestamp.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/timestamp.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/wrappers.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/wrappers.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/protobuf/wrappers.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/rpc/status.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/google/rpc/status.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/rpc/status.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/google/rpc/status.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c" role="src" />
@@ -547,22 +417,16 @@
     <file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/migrate.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/migrate.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/migrate.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/sensitive.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/status.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/status.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/status.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/status.upbdefs.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/versioning.upb.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/annotations/versioning.upb.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/validate/validate.upb.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/upb-generated/validate/validate.upb.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/validate/validate.upbdefs.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/upb-generated/validate/validate.upbdefs.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/avl/avl.cc" role="src" />
     <file baseinstalldir="/" name="src/core/lib/avl/avl.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/backoff/backoff.cc" role="src" />
@@ -935,8 +799,6 @@
     <file baseinstalldir="/" name="src/core/lib/security/transport/security_handshaker.cc" role="src" />
     <file baseinstalldir="/" name="src/core/lib/security/transport/security_handshaker.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/security/transport/server_auth_filter.cc" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/security/transport/target_authority_table.cc" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/security/transport/target_authority_table.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/security/transport/tsi_error.cc" role="src" />
     <file baseinstalldir="/" name="src/core/lib/security/transport/tsi_error.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/security/util/json_util.cc" role="src" />
@@ -947,13 +809,11 @@
     <file baseinstalldir="/" name="src/core/lib/slice/percent_encoding.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/slice/slice.cc" role="src" />
     <file baseinstalldir="/" name="src/core/lib/slice/slice_buffer.cc" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/slice/slice_hash_table.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/slice/slice_intern.cc" role="src" />
     <file baseinstalldir="/" name="src/core/lib/slice/slice_internal.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/slice/slice_string_helpers.cc" role="src" />
     <file baseinstalldir="/" name="src/core/lib/slice/slice_string_helpers.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/slice/slice_utils.h" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/slice/slice_weak_hash_table.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/surface/api_trace.cc" role="src" />
     <file baseinstalldir="/" name="src/core/lib/surface/api_trace.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/surface/byte_buffer.cc" role="src" />
@@ -987,6 +847,8 @@
     <file baseinstalldir="/" name="src/core/lib/surface/validate_metadata.cc" role="src" />
     <file baseinstalldir="/" name="src/core/lib/surface/validate_metadata.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/surface/version.cc" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/transport/authority_override.cc" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/transport/authority_override.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/bdp_estimator.cc" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/bdp_estimator.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/byte_stream.cc" role="src" />
@@ -1105,12 +967,15 @@
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/bits.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/cycleclock.cc" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/cycleclock.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/direct_mmap.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/endian.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/errno_saver.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/hide_ptr.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/identity.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/inline_variable.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/invoke.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/low_level_alloc.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/per_thread_tls.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/internal/raw_logging.cc" role="src" />
@@ -1143,19 +1008,52 @@
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/policy_checks.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/port.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/base/thread_annotations.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/container/fixed_array.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/container/inlined_vector.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/container/internal/compressed_tuple.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/container/internal/inlined_vector.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/demangle.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/demangle.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/symbolize.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/internal/vdso_support.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/stacktrace.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/stacktrace.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/symbolize.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/symbolize.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/symbolize_elf.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/debugging/symbolize_win32.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/functional/function_ref.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/functional/internal/function_ref.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/memory/memory.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/meta/type_traits.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/numeric/int128.cc" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/numeric/int128.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/status/status.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/status/status.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/status/status_payload_printer.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/status/status_payload_printer.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/ascii.cc" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/ascii.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/charconv.cc" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/charconv.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/cord.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/cord.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/escaping.cc" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/escaping.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/internal/char_map.h" role="src" />
@@ -1163,6 +1061,7 @@
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/internal/charconv_parse.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/internal/cord_internal.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/internal/escaping.cc" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/internal/escaping.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/internal/memutil.cc" role="src" />
@@ -1205,6 +1104,24 @@
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/strip.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/substitute.cc" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/strings/substitute.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/barrier.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/barrier.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/blocking_counter.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/blocking_counter.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/internal/waiter.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/internal/waiter.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/mutex.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/mutex.h" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/notification.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/abseil-cpp/absl/synchronization/notification.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/time/civil_time.cc" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/time/civil_time.h" role="src" />
     <file baseinstalldir="/" name="third_party/abseil-cpp/absl/time/clock.cc" role="src" />
@@ -1714,10 +1631,57 @@
     <file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h" role="src" />
     <file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h" role="src" />
     <file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/bitmap256.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/bitstate.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/compile.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/dfa.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/filtered_re2.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/filtered_re2.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/mimics_pcre.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/nfa.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/onepass.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/parse.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/perl_groups.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/pod_array.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/prefilter.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/prefilter.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/prefilter_tree.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/prefilter_tree.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/prog.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/prog.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/re2.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/re2.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/regexp.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/regexp.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/set.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/set.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/simplify.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/sparse_array.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/sparse_set.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/stringpiece.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/stringpiece.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/tostring.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/unicode_casefold.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/unicode_casefold.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/unicode_groups.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/unicode_groups.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/re2/walker-inl.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/benchmark.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/flags.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/logging.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/malloc_counter.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/mix.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/mutex.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/pcre.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/pcre.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/rune.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/strutil.cc" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/strutil.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/test.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/utf.h" role="src" />
+    <file baseinstalldir="/" name="third_party/re2/util/util.h" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/decode.c" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/decode.h" role="src" />
-    <file baseinstalldir="/" name="third_party/upb/upb/def.c" role="src" />
-    <file baseinstalldir="/" name="third_party/upb/upb/def.h" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/encode.c" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/encode.h" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/msg.c" role="src" />
@@ -1725,12 +1689,8 @@
     <file baseinstalldir="/" name="third_party/upb/upb/port.c" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/port_def.inc" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/port_undef.inc" role="src" />
-    <file baseinstalldir="/" name="third_party/upb/upb/reflection.c" role="src" />
-    <file baseinstalldir="/" name="third_party/upb/upb/reflection.h" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/table.c" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/table.int.h" role="src" />
-    <file baseinstalldir="/" name="third_party/upb/upb/text_encode.c" role="src" />
-    <file baseinstalldir="/" name="third_party/upb/upb/text_encode.h" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/upb.c" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/upb.h" role="src" />
     <file baseinstalldir="/" name="third_party/upb/upb/upb.hpp" role="src" />

+ 17 - 11
src/boringssl/boringssl_prefix_symbols.h

@@ -1,4 +1,4 @@
-// generated by generate_boringssl_prefix_header.sh on BoringSSL commit: 3ab047a8e377083a9b38dc908fe1612d5743a021
+// generated by generate_boringssl_prefix_header.sh on BoringSSL commit: e8a935e323510419e0b37638716f6df4dcbbe6f6
 
 // Copyright (c) 2018, Google Inc.
 //
@@ -401,6 +401,7 @@
 #define SSL_peek BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, SSL_peek)
 #define SSL_pending BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, SSL_pending)
 #define SSL_process_quic_post_handshake BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, SSL_process_quic_post_handshake)
+#define SSL_process_tls13_new_session_ticket BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, SSL_process_tls13_new_session_ticket)
 #define SSL_provide_quic_data BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, SSL_provide_quic_data)
 #define SSL_quic_max_handshake_flight_len BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, SSL_quic_max_handshake_flight_len)
 #define SSL_quic_read_level BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, SSL_quic_read_level)
@@ -2119,7 +2120,6 @@
 #define TRUST_TOKEN_ISSUER_set_metadata_key BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, TRUST_TOKEN_ISSUER_set_metadata_key)
 #define TRUST_TOKEN_ISSUER_set_srr_key BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, TRUST_TOKEN_ISSUER_set_srr_key)
 #define TRUST_TOKEN_decode_private_metadata BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, TRUST_TOKEN_decode_private_metadata)
-#define TRUST_TOKEN_experiment_v0 BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, TRUST_TOKEN_experiment_v0)
 #define TRUST_TOKEN_experiment_v1 BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, TRUST_TOKEN_experiment_v1)
 #define TRUST_TOKEN_free BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, TRUST_TOKEN_free)
 #define TRUST_TOKEN_generate_key BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, TRUST_TOKEN_generate_key)
@@ -2199,8 +2199,10 @@
 #define X509_CERT_AUX_new BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CERT_AUX_new)
 #define X509_CERT_AUX_print BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CERT_AUX_print)
 #define X509_CINF_free BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CINF_free)
+#define X509_CINF_get_signature BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CINF_get_signature)
 #define X509_CINF_it BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CINF_it)
 #define X509_CINF_new BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CINF_new)
+#define X509_CINF_set_modified BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CINF_set_modified)
 #define X509_CRL_INFO_free BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_INFO_free)
 #define X509_CRL_INFO_it BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_INFO_it)
 #define X509_CRL_INFO_new BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_INFO_new)
@@ -2221,14 +2223,19 @@
 #define X509_CRL_get0_lastUpdate BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get0_lastUpdate)
 #define X509_CRL_get0_nextUpdate BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get0_nextUpdate)
 #define X509_CRL_get0_signature BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get0_signature)
+#define X509_CRL_get_REVOKED BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_REVOKED)
 #define X509_CRL_get_ext BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_ext)
 #define X509_CRL_get_ext_by_NID BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_ext_by_NID)
 #define X509_CRL_get_ext_by_OBJ BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_ext_by_OBJ)
 #define X509_CRL_get_ext_by_critical BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_ext_by_critical)
 #define X509_CRL_get_ext_count BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_ext_count)
 #define X509_CRL_get_ext_d2i BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_ext_d2i)
+#define X509_CRL_get_issuer BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_issuer)
+#define X509_CRL_get_lastUpdate BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_lastUpdate)
 #define X509_CRL_get_meth_data BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_meth_data)
+#define X509_CRL_get_nextUpdate BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_nextUpdate)
 #define X509_CRL_get_signature_nid BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_signature_nid)
+#define X509_CRL_get_version BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_get_version)
 #define X509_CRL_it BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_it)
 #define X509_CRL_match BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_match)
 #define X509_CRL_new BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_CRL_new)
@@ -2363,6 +2370,8 @@
 #define X509_REQ_get_extensions BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_REQ_get_extensions)
 #define X509_REQ_get_pubkey BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_REQ_get_pubkey)
 #define X509_REQ_get_signature_nid BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_REQ_get_signature_nid)
+#define X509_REQ_get_subject_name BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_REQ_get_subject_name)
+#define X509_REQ_get_version BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_REQ_get_version)
 #define X509_REQ_it BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_REQ_it)
 #define X509_REQ_new BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_REQ_new)
 #define X509_REQ_print BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_REQ_print)
@@ -2552,6 +2561,8 @@
 #define X509_get0_tbs_sigalg BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get0_tbs_sigalg)
 #define X509_get1_email BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get1_email)
 #define X509_get1_ocsp BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get1_ocsp)
+#define X509_get_X509_PUBKEY BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_X509_PUBKEY)
+#define X509_get_cert_info BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_cert_info)
 #define X509_get_default_cert_area BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_default_cert_area)
 #define X509_get_default_cert_dir BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_default_cert_dir)
 #define X509_get_default_cert_dir_env BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_default_cert_dir_env)
@@ -2570,10 +2581,13 @@
 #define X509_get_extension_flags BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_extension_flags)
 #define X509_get_issuer_name BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_issuer_name)
 #define X509_get_key_usage BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_key_usage)
+#define X509_get_notAfter BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_notAfter)
+#define X509_get_notBefore BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_notBefore)
 #define X509_get_pubkey BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_pubkey)
 #define X509_get_serialNumber BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_serialNumber)
 #define X509_get_signature_nid BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_signature_nid)
 #define X509_get_subject_name BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_subject_name)
+#define X509_get_version BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_get_version)
 #define X509_getm_notAfter BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_getm_notAfter)
 #define X509_getm_notBefore BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_getm_notBefore)
 #define X509_gmtime_adj BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, X509_gmtime_adj)
@@ -3007,9 +3021,7 @@
 #define ec_get_x_coordinate_as_scalar BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, ec_get_x_coordinate_as_scalar)
 #define ec_group_new BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, ec_group_new)
 #define ec_hash_to_curve_p384_xmd_sha512_sswu_draft07 BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, ec_hash_to_curve_p384_xmd_sha512_sswu_draft07)
-#define ec_hash_to_curve_p521_xmd_sha512_sswu_draft06 BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, ec_hash_to_curve_p521_xmd_sha512_sswu_draft06)
 #define ec_hash_to_scalar_p384_xmd_sha512_draft07 BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, ec_hash_to_scalar_p384_xmd_sha512_draft07)
-#define ec_hash_to_scalar_p521_xmd_sha512_draft06 BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, ec_hash_to_scalar_p521_xmd_sha512_draft06)
 #define ec_init_precomp BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, ec_init_precomp)
 #define ec_jacobian_to_affine BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, ec_jacobian_to_affine)
 #define ec_jacobian_to_affine_batch BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, ec_jacobian_to_affine_batch)
@@ -3238,13 +3250,6 @@
 #define pkcs7_bundle BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pkcs7_bundle)
 #define pkcs7_parse_header BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pkcs7_parse_header)
 #define pkcs8_pbe_decrypt BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pkcs8_pbe_decrypt)
-#define pmbtoken_exp0_blind BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pmbtoken_exp0_blind)
-#define pmbtoken_exp0_client_key_from_bytes BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pmbtoken_exp0_client_key_from_bytes)
-#define pmbtoken_exp0_generate_key BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pmbtoken_exp0_generate_key)
-#define pmbtoken_exp0_issuer_key_from_bytes BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pmbtoken_exp0_issuer_key_from_bytes)
-#define pmbtoken_exp0_read BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pmbtoken_exp0_read)
-#define pmbtoken_exp0_sign BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pmbtoken_exp0_sign)
-#define pmbtoken_exp0_unblind BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pmbtoken_exp0_unblind)
 #define pmbtoken_exp1_blind BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pmbtoken_exp1_blind)
 #define pmbtoken_exp1_client_key_from_bytes BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pmbtoken_exp1_client_key_from_bytes)
 #define pmbtoken_exp1_generate_key BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, pmbtoken_exp1_generate_key)
@@ -3359,6 +3364,7 @@
 #define x509_rsa_ctx_to_pss BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, x509_rsa_ctx_to_pss)
 #define x509_rsa_pss_to_ctx BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, x509_rsa_pss_to_ctx)
 #define x509v3_bytes_to_hex BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, x509v3_bytes_to_hex)
+#define x509v3_cache_extensions BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, x509v3_cache_extensions)
 #define x509v3_hex_to_bytes BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, x509v3_hex_to_bytes)
 #define x509v3_looks_like_dns_name BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, x509v3_looks_like_dns_name)
 #define x509v3_name_cmp BORINGSSL_ADD_PREFIX(BORINGSSL_PREFIX, x509v3_name_cmp)

+ 51 - 13
src/compiler/objective_c_plugin.cc

@@ -90,8 +90,10 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
       return true;
     }
 
+    bool grpc_local_import = false;
     ::std::string framework;
     ::std::string pb_runtime_import_prefix;
+    ::std::string grpc_local_import_prefix;
     std::vector<::std::string> params_list =
         grpc_generator::tokenize(parameter, ",");
     for (auto param_str = params_list.begin(); param_str != params_list.end();
@@ -117,6 +119,13 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
         }
         pb_runtime_import_prefix = param[1];
         grpc_generator::StripSuffix(&pb_runtime_import_prefix, "/");
+      } else if (param[0] == "grpc_local_import_prefix") {
+        grpc_local_import = true;
+        if (param.size() != 2) {
+          *error = grpc::string("Format: grpc_local_import_prefix=dir/");
+          return false;
+        }
+        grpc_local_import_prefix = param[1];
       }
     }
 
@@ -161,14 +170,30 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
         imports = FrameworkImport(file_name + ".pbobjc.h", framework);
       }
 
-      ::std::string system_imports =
-          SystemImport("ProtoRPC/ProtoService.h") +
-          (generator_params.no_v1_compatibility
-               ? SystemImport("ProtoRPC/ProtoRPC.h")
-               : SystemImport("ProtoRPC/ProtoRPCLegacy.h"));
-      if (!generator_params.no_v1_compatibility) {
-        system_imports += SystemImport("RxLibrary/GRXWriteable.h") +
-                          SystemImport("RxLibrary/GRXWriter.h");
+      ::std::string system_imports;
+      if (grpc_local_import) {
+        system_imports =
+            LocalImport(grpc_local_import_prefix + "ProtoRPC/ProtoService.h");
+        if (generator_params.no_v1_compatibility) {
+          system_imports +=
+              LocalImport(grpc_local_import_prefix + "ProtoRPC/ProtoRPC.h");
+        } else {
+          system_imports += LocalImport(grpc_local_import_prefix +
+                                        "ProtoRPC/ProtoRPCLegacy.h");
+          system_imports += LocalImport(grpc_local_import_prefix +
+                                        "RxLibrary/GRXWriteable.h");
+          system_imports +=
+              LocalImport(grpc_local_import_prefix + "RxLibrary/GRXWriter.h");
+        }
+      } else {
+        system_imports = SystemImport("ProtoRPC/ProtoService.h");
+        if (generator_params.no_v1_compatibility) {
+          system_imports += SystemImport("ProtoRPC/ProtoRPC.h");
+        } else {
+          system_imports += SystemImport("ProtoRPC/ProtoRPCLegacy.h");
+          system_imports += SystemImport("RxLibrary/GRXWriteable.h");
+          system_imports += SystemImport("RxLibrary/GRXWriter.h");
+        }
       }
 
       ::std::string forward_declarations =
@@ -232,11 +257,24 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
         imports = FrameworkImport(file_name + ".pbrpc.h", framework) +
                   FrameworkImport(file_name + ".pbobjc.h", framework);
       }
-      imports += (generator_params.no_v1_compatibility
-                      ? SystemImport("ProtoRPC/ProtoRPC.h")
-                      : SystemImport("ProtoRPC/ProtoRPCLegacy.h"));
-      if (!generator_params.no_v1_compatibility) {
-        imports += SystemImport("RxLibrary/GRXWriter+Immediate.h");
+
+      if (grpc_local_import) {
+        if (generator_params.no_v1_compatibility) {
+          imports +=
+              LocalImport(grpc_local_import_prefix + "ProtoRPC/ProtoRPC.h");
+        } else {
+          imports += LocalImport(grpc_local_import_prefix +
+                                 "ProtoRPC/ProtoRPCLegacy.h");
+          imports += LocalImport(grpc_local_import_prefix +
+                                 "RxLibrary/GRXWriter+Immediate.h");
+        }
+      } else {
+        if (generator_params.no_v1_compatibility) {
+          imports += SystemImport("ProtoRPC/ProtoRPC.h");
+        } else {
+          imports += SystemImport("ProtoRPC/ProtoRPCLegacy.h");
+          imports += SystemImport("RxLibrary/GRXWriter+Immediate.h");
+        }
       }
 
       ::std::string class_imports;

+ 6 - 8
src/compiler/ruby_generator.cc

@@ -38,13 +38,12 @@ namespace grpc_ruby_generator {
 namespace {
 
 // Prints out the method using the ruby gRPC DSL.
-void PrintMethod(const MethodDescriptor* method, const std::string& package,
-                 Printer* out) {
-  std::string input_type = RubyTypeOf(method->input_type(), package);
+void PrintMethod(const MethodDescriptor* method, Printer* out) {
+  std::string input_type = RubyTypeOf(method->input_type());
   if (method->client_streaming()) {
     input_type = "stream(" + input_type + ")";
   }
-  std::string output_type = RubyTypeOf(method->output_type(), package);
+  std::string output_type = RubyTypeOf(method->output_type());
   if (method->server_streaming()) {
     output_type = "stream(" + output_type + ")";
   }
@@ -62,8 +61,7 @@ void PrintMethod(const MethodDescriptor* method, const std::string& package,
 }
 
 // Prints out the service using the ruby gRPC DSL.
-void PrintService(const ServiceDescriptor* service, const std::string& package,
-                  Printer* out) {
+void PrintService(const ServiceDescriptor* service, Printer* out) {
   if (service->method_count() == 0) {
     return;
   }
@@ -91,7 +89,7 @@ void PrintService(const ServiceDescriptor* service, const std::string& package,
   out->Print(pkg_vars, "self.service_name = '$service_full_name$'\n");
   out->Print("\n");
   for (int i = 0; i < service->method_count(); ++i) {
-    PrintMethod(service->method(i), package, out);
+    PrintMethod(service->method(i), out);
   }
   out->Outdent();
 
@@ -201,7 +199,7 @@ std::string GetServices(const FileDescriptor* file) {
     }
     for (int i = 0; i < file->service_count(); ++i) {
       auto service = file->service(i);
-      PrintService(service, file->package(), &out);
+      PrintService(service, &out);
     }
     for (size_t i = 0; i < modules.size(); ++i) {
       out.Outdent();

+ 4 - 5
src/compiler/ruby_generator_string-inl.h

@@ -116,13 +116,12 @@ inline std::string RubyPackage(const grpc::protobuf::FileDescriptor* file) {
 }
 
 // RubyTypeOf updates a proto type to the required ruby equivalent.
-inline std::string RubyTypeOf(const grpc::protobuf::Descriptor* descriptor,
-                              const std::string& package) {
+inline std::string RubyTypeOf(const grpc::protobuf::Descriptor* descriptor) {
   std::string proto_type = descriptor->full_name();
-  ReplacePrefix(&proto_type, package,
-                "");                    // remove the leading package if present
-  ReplacePrefix(&proto_type, ".", "");  // remove the leading . (no package)
   if (descriptor->file()->options().has_ruby_package()) {
+    // remove the leading package if present
+    ReplacePrefix(&proto_type, descriptor->file()->package(), "");
+    ReplacePrefix(&proto_type, ".", "");  // remove the leading . (no package)
     proto_type = RubyPackage(descriptor->file()) + "." + proto_type;
   }
   std::string res(proto_type);

+ 62 - 40
src/core/ext/filters/client_channel/client_channel.cc

@@ -171,31 +171,14 @@ class ChannelData {
                                       grpc_connectivity_state* state,
                                       grpc_closure* on_complete,
                                       grpc_closure* watcher_timer_init) {
-    auto* watcher = new ExternalConnectivityWatcher(
-        this, pollent, state, on_complete, watcher_timer_init);
-    {
-      MutexLock lock(&external_watchers_mu_);
-      // Will be deleted when the watch is complete.
-      GPR_ASSERT(external_watchers_[on_complete] == nullptr);
-      external_watchers_[on_complete] = watcher;
-    }
-    watcher->Start();
+    new ExternalConnectivityWatcher(this, pollent, state, on_complete,
+                                    watcher_timer_init);
   }
 
   void RemoveExternalConnectivityWatcher(grpc_closure* on_complete,
                                          bool cancel) {
-    ExternalConnectivityWatcher* watcher = nullptr;
-    {
-      MutexLock lock(&external_watchers_mu_);
-      auto it = external_watchers_.find(on_complete);
-      if (it != external_watchers_.end()) {
-        watcher = it->second;
-        external_watchers_.erase(it);
-      }
-    }
-    // watcher->Cancel() will hop into the WorkSerializer, so we have to unlock
-    // the mutex before calling it.
-    if (watcher != nullptr && cancel) watcher->Cancel();
+    ExternalConnectivityWatcher::RemoveWatcherFromExternalWatchersMap(
+        this, on_complete, cancel);
   }
 
   int NumExternalConnectivityWatchers() const {
@@ -226,13 +209,19 @@ class ChannelData {
 
     ~ExternalConnectivityWatcher();
 
-    void Start();
+    // Removes the watcher from the external_watchers_ map.
+    static void RemoveWatcherFromExternalWatchersMap(ChannelData* chand,
+                                                     grpc_closure* on_complete,
+                                                     bool cancel);
 
-    void Notify(grpc_connectivity_state state) override;
+    void Notify(grpc_connectivity_state state,
+                const absl::Status& /* status */) override;
 
     void Cancel();
 
    private:
+    // Adds the watcher to state_tracker_. Consumes the ref that is passed to it
+    // from Start().
     void AddWatcherLocked();
     void RemoveWatcherLocked();
 
@@ -272,7 +261,8 @@ class ChannelData {
   ~ChannelData();
 
   void UpdateStateAndPickerLocked(
-      grpc_connectivity_state state, const char* reason,
+      grpc_connectivity_state state, const absl::Status& status,
+      const char* reason,
       std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker);
 
   void UpdateServiceConfigInDataPlaneLocked(
@@ -360,7 +350,8 @@ class ChannelData {
   // synchronously via grpc_channel_num_external_connectivity_watchers().
   //
   mutable Mutex external_watchers_mu_;
-  std::map<grpc_closure*, ExternalConnectivityWatcher*> external_watchers_;
+  std::map<grpc_closure*, RefCountedPtr<ExternalConnectivityWatcher>>
+      external_watchers_;
 };
 
 //
@@ -1180,6 +1171,21 @@ ChannelData::ExternalConnectivityWatcher::ExternalConnectivityWatcher(
   grpc_polling_entity_add_to_pollset_set(&pollent_,
                                          chand_->interested_parties_);
   GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ExternalConnectivityWatcher");
+  {
+    MutexLock lock(&chand_->external_watchers_mu_);
+    // Will be deleted when the watch is complete.
+    GPR_ASSERT(chand->external_watchers_[on_complete] == nullptr);
+    // Store a ref to the watcher in the external_watchers_ map.
+    chand->external_watchers_[on_complete] =
+        Ref(DEBUG_LOCATION, "AddWatcherToExternalWatchersMapLocked");
+  }
+  // Pass the ref from creating the object to Start().
+  chand_->work_serializer_->Run(
+      [this]() {
+        // The ref is passed to AddWatcherLocked().
+        AddWatcherLocked();
+      },
+      DEBUG_LOCATION);
 }
 
 ChannelData::ExternalConnectivityWatcher::~ExternalConnectivityWatcher() {
@@ -1189,13 +1195,26 @@ ChannelData::ExternalConnectivityWatcher::~ExternalConnectivityWatcher() {
                            "ExternalConnectivityWatcher");
 }
 
-void ChannelData::ExternalConnectivityWatcher::Start() {
-  chand_->work_serializer_->Run([this]() { AddWatcherLocked(); },
-                                DEBUG_LOCATION);
+void ChannelData::ExternalConnectivityWatcher::
+    RemoveWatcherFromExternalWatchersMap(ChannelData* chand,
+                                         grpc_closure* on_complete,
+                                         bool cancel) {
+  RefCountedPtr<ExternalConnectivityWatcher> watcher;
+  {
+    MutexLock lock(&chand->external_watchers_mu_);
+    auto it = chand->external_watchers_.find(on_complete);
+    if (it != chand->external_watchers_.end()) {
+      watcher = std::move(it->second);
+      chand->external_watchers_.erase(it);
+    }
+  }
+  // watcher->Cancel() will hop into the WorkSerializer, so we have to unlock
+  // the mutex before calling it.
+  if (watcher != nullptr && cancel) watcher->Cancel();
 }
 
 void ChannelData::ExternalConnectivityWatcher::Notify(
-    grpc_connectivity_state state) {
+    grpc_connectivity_state state, const absl::Status& /* status */) {
   bool done = false;
   if (!done_.CompareExchangeStrong(&done, true, MemoryOrder::RELAXED,
                                    MemoryOrder::RELAXED)) {
@@ -1229,7 +1248,7 @@ void ChannelData::ExternalConnectivityWatcher::Cancel() {
 
 void ChannelData::ExternalConnectivityWatcher::AddWatcherLocked() {
   Closure::Run(DEBUG_LOCATION, watcher_timer_init_, GRPC_ERROR_NONE);
-  // Add new watcher.
+  // Add new watcher. Pass the ref of the object from creation to OrphanablePtr.
   chand_->state_tracker_.AddWatcher(
       initial_state_, OrphanablePtr<ConnectivityStateWatcherInterface>(this));
 }
@@ -1335,19 +1354,21 @@ class ChannelData::ClientChannelControlHelper
   }
 
   void UpdateState(
-      grpc_connectivity_state state,
+      grpc_connectivity_state state, const absl::Status& status,
       std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) override {
     grpc_error* disconnect_error = chand_->disconnect_error();
     if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
       const char* extra = disconnect_error == GRPC_ERROR_NONE
                               ? ""
                               : " (ignoring -- channel shutting down)";
-      gpr_log(GPR_INFO, "chand=%p: update: state=%s picker=%p%s", chand_,
-              ConnectivityStateName(state), picker.get(), extra);
+      gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
+              chand_, ConnectivityStateName(state), status.ToString().c_str(),
+              picker.get(), extra);
     }
     // Do update only if not shutting down.
     if (disconnect_error == GRPC_ERROR_NONE) {
-      chand_->UpdateStateAndPickerLocked(state, "helper", std::move(picker));
+      chand_->UpdateStateAndPickerLocked(state, status, "helper",
+                                         std::move(picker));
     }
   }
 
@@ -1684,7 +1705,8 @@ ChannelData::~ChannelData() {
 }
 
 void ChannelData::UpdateStateAndPickerLocked(
-    grpc_connectivity_state state, const char* reason,
+    grpc_connectivity_state state, const absl::Status& status,
+    const char* reason,
     std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) {
   // Clean the control plane when entering IDLE.
   if (picker_ == nullptr) {
@@ -1694,7 +1716,7 @@ void ChannelData::UpdateStateAndPickerLocked(
     received_first_resolver_result_ = false;
   }
   // Update connectivity state.
-  state_tracker_.SetState(state, reason);
+  state_tracker_.SetState(state, status, reason);
   if (channelz_node_ != nullptr) {
     channelz_node_->SetConnectivityState(state);
     channelz_node_->AddTraceEvent(
@@ -1921,8 +1943,8 @@ void ChannelData::StartTransportOpLocked(grpc_transport_op* op) {
         static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
       if (disconnect_error() == GRPC_ERROR_NONE) {
         // Enter IDLE state.
-        UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, "channel entering IDLE",
-                                   nullptr);
+        UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
+                                   "channel entering IDLE", nullptr);
       }
       GRPC_ERROR_UNREF(op->disconnect_with_error);
     } else {
@@ -1931,7 +1953,7 @@ void ChannelData::StartTransportOpLocked(grpc_transport_op* op) {
                  GRPC_ERROR_NONE);
       disconnect_error_.Store(op->disconnect_with_error, MemoryOrder::RELEASE);
       UpdateStateAndPickerLocked(
-          GRPC_CHANNEL_SHUTDOWN, "shutdown from API",
+          GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
           absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(
               GRPC_ERROR_REF(op->disconnect_with_error)));
     }
@@ -3864,7 +3886,7 @@ grpc_error* CallData::ApplyServiceConfigToCallLocked(
   if (service_config != nullptr) {
     // Use the ConfigSelector to determine the config for the call.
     ConfigSelector::CallConfig call_config =
-        config_selector->GetCallConfig({&path_, initial_metadata});
+        config_selector->GetCallConfig({&path_, initial_metadata, arena_});
     if (call_config.error != GRPC_ERROR_NONE) return call_config.error;
     call_attributes_ = std::move(call_config.call_attributes);
     on_call_committed_ = std::move(call_config.on_call_committed);

+ 2 - 0
src/core/ext/filters/client_channel/config_selector.h

@@ -29,6 +29,7 @@
 
 #include "src/core/ext/filters/client_channel/service_config.h"
 #include "src/core/ext/filters/client_channel/service_config_parser.h"
+#include "src/core/lib/gprpp/arena.h"
 #include "src/core/lib/gprpp/ref_counted.h"
 #include "src/core/lib/gprpp/ref_counted_ptr.h"
 #include "src/core/lib/transport/metadata_batch.h"
@@ -42,6 +43,7 @@ class ConfigSelector : public RefCounted<ConfigSelector> {
   struct GetCallConfigArgs {
     grpc_slice* path;
     grpc_metadata_batch* initial_metadata;
+    Arena* arena;
   };
 
   struct CallConfig {

+ 24 - 2
src/core/ext/filters/client_channel/global_subchannel_pool.cc

@@ -24,6 +24,9 @@
 
 namespace grpc_core {
 
+#define GRPC_REGISTER_SUBCHANNEL_CALM_DOWN_AFTER_ATTEMPTS 100
+#define GRPC_REGISTER_SUBCHANNEL_CALM_DOWN_MICROS 10
+
 GlobalSubchannelPool::GlobalSubchannelPool() {
   subchannel_map_ = grpc_avl_create(&subchannel_avl_vtable_);
   gpr_mu_init(&mu_);
@@ -58,7 +61,7 @@ Subchannel* GlobalSubchannelPool::RegisterSubchannel(SubchannelKey* key,
                                                      Subchannel* constructed) {
   Subchannel* c = nullptr;
   // Compare and swap (CAS) loop:
-  while (c == nullptr) {
+  for (int attempt_count = 0; c == nullptr; attempt_count++) {
     // Ref the shared map to have a local copy.
     gpr_mu_lock(&mu_);
     grpc_avl old_map = grpc_avl_ref(subchannel_map_, nullptr);
@@ -72,7 +75,26 @@ Subchannel* GlobalSubchannelPool::RegisterSubchannel(SubchannelKey* key,
         GRPC_SUBCHANNEL_UNREF(constructed,
                               "subchannel_register+found_existing");
         // Exit the CAS loop without modifying the shared map.
-      }  // Else, reuse failed, so retry CAS loop.
+      } else {
+        // Reuse of the subchannel failed, so retry CAS loop
+        if (attempt_count >=
+            GRPC_REGISTER_SUBCHANNEL_CALM_DOWN_AFTER_ATTEMPTS) {
+          // GRPC_SUBCHANNEL_REF_FROM_WEAK_REF returning nullptr means that the
+          // subchannel we got is no longer valid and it's going to be removed
+          // from the AVL tree soon. Spinning here excesively here can actually
+          // prevent another thread from removing the subchannel, basically
+          // resulting in a live lock. See b/157516542 for more details.
+          // TODO(jtattermusch): the entire ref-counting mechanism for
+          // subchannels should be overhaulded, but the current workaround
+          // is fine for short-term.
+          // TODO(jtattermusch): gpr does not support thread yield operation,
+          // so a very short wait is the best we can do.
+          gpr_sleep_until(gpr_time_add(
+              gpr_now(GPR_CLOCK_REALTIME),
+              gpr_time_from_micros(GRPC_REGISTER_SUBCHANNEL_CALM_DOWN_MICROS,
+                                   GPR_TIMESPAN)));
+        }
+      }
     } else {
       // There hasn't been such subchannel. Add one.
       // Note that we should ref the old map first because grpc_avl_add() will

+ 5 - 1
src/core/ext/filters/client_channel/health/health_check_client.cc

@@ -91,7 +91,11 @@ void HealthCheckClient::SetHealthStatusLocked(grpc_connectivity_state state,
     gpr_log(GPR_INFO, "HealthCheckClient %p: setting state=%s reason=%s", this,
             ConnectivityStateName(state), reason);
   }
-  if (watcher_ != nullptr) watcher_->Notify(state);
+  if (watcher_ != nullptr)
+    watcher_->Notify(state,
+                     state == GRPC_CHANNEL_TRANSIENT_FAILURE
+                         ? absl::Status(absl::StatusCode::kUnavailable, reason)
+                         : absl::Status());
 }
 
 void HealthCheckClient::Orphan() {

+ 2 - 3
src/core/ext/filters/client_channel/http_connect_handshaker.cc

@@ -325,10 +325,9 @@ void HttpConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
   args_ = args;
   on_handshake_done_ = on_handshake_done;
   // Log connection via proxy.
-  char* proxy_name = grpc_endpoint_get_peer(args->endpoint);
+  std::string proxy_name(grpc_endpoint_get_peer(args->endpoint));
   gpr_log(GPR_INFO, "Connecting to server %s via HTTP proxy %s", server_name,
-          proxy_name);
-  gpr_free(proxy_name);
+          proxy_name.c_str());
   // Construct HTTP CONNECT request.
   grpc_httpcli_request request;
   request.host = server_name;

+ 2 - 0
src/core/ext/filters/client_channel/lb_policy.h

@@ -24,6 +24,7 @@
 #include <functional>
 #include <iterator>
 
+#include "absl/status/status.h"
 #include "absl/strings/string_view.h"
 
 #include "src/core/ext/filters/client_channel/server_address.h"
@@ -283,6 +284,7 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
     /// Sets the connectivity state and returns a new picker to be used
     /// by the client channel.
     virtual void UpdateState(grpc_connectivity_state state,
+                             const absl::Status& status,
                              std::unique_ptr<SubchannelPicker>) = 0;
 
     /// Requests that the resolver re-resolve.

+ 6 - 4
src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc

@@ -45,7 +45,7 @@ class ChildPolicyHandler::Helper
     return parent_->channel_control_helper()->CreateSubchannel(args);
   }
 
-  void UpdateState(grpc_connectivity_state state,
+  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
                    std::unique_ptr<SubchannelPicker> picker) override {
     if (parent_->shutting_down_) return;
     // If this request is from the pending child policy, ignore it until
@@ -55,8 +55,9 @@ class ChildPolicyHandler::Helper
       if (GRPC_TRACE_FLAG_ENABLED(*(parent_->tracer_))) {
         gpr_log(GPR_INFO,
                 "[child_policy_handler %p] helper %p: pending child policy %p "
-                "reports state=%s",
-                parent_.get(), this, child_, ConnectivityStateName(state));
+                "reports state=%s (%s)",
+                parent_.get(), this, child_, ConnectivityStateName(state),
+                status.ToString().c_str());
       }
       if (state == GRPC_CHANNEL_CONNECTING) return;
       grpc_pollset_set_del_pollset_set(
@@ -67,7 +68,8 @@ class ChildPolicyHandler::Helper
       // This request is from an outdated child, so ignore it.
       return;
     }
-    parent_->channel_control_helper()->UpdateState(state, std::move(picker));
+    parent_->channel_control_helper()->UpdateState(state, status,
+                                                   std::move(picker));
   }
 
   void RequestReresolution() override {

+ 50 - 27
src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc

@@ -101,7 +101,6 @@
 #include "src/core/lib/iomgr/sockaddr.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "src/core/lib/iomgr/timer.h"
-#include "src/core/lib/slice/slice_hash_table.h"
 #include "src/core/lib/slice/slice_internal.h"
 #include "src/core/lib/slice/slice_string_helpers.h"
 #include "src/core/lib/surface/call.h"
@@ -131,16 +130,21 @@ constexpr char kGrpclb[] = "grpclb";
 
 class GrpcLbConfig : public LoadBalancingPolicy::Config {
  public:
-  explicit GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy)
-      : child_policy_(std::move(child_policy)) {}
+  GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
+               std::string service_name)
+      : child_policy_(std::move(child_policy)),
+        service_name_(std::move(service_name)) {}
   const char* name() const override { return kGrpclb; }
 
   RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
     return child_policy_;
   }
 
+  const std::string& service_name() const { return service_name_; }
+
  private:
   RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
+  std::string service_name_;
 };
 
 class GrpcLb : public LoadBalancingPolicy {
@@ -299,7 +303,7 @@ class GrpcLb : public LoadBalancingPolicy {
 
     RefCountedPtr<SubchannelInterface> CreateSubchannel(
         const grpc_channel_args& args) override;
-    void UpdateState(grpc_connectivity_state state,
+    void UpdateState(grpc_connectivity_state state, const absl::Status& status,
                      std::unique_ptr<SubchannelPicker> picker) override;
     void RequestReresolution() override;
     void AddTraceEvent(TraceSeverity severity,
@@ -318,15 +322,16 @@ class GrpcLb : public LoadBalancingPolicy {
     ~StateWatcher() { parent_.reset(DEBUG_LOCATION, "StateWatcher"); }
 
    private:
-    void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
+    void OnConnectivityStateChange(grpc_connectivity_state new_state,
+                                   const absl::Status& status) override {
       if (parent_->fallback_at_startup_checks_pending_ &&
           new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
         // In TRANSIENT_FAILURE.  Cancel the fallback timer and go into
         // fallback mode immediately.
         gpr_log(GPR_INFO,
-                "[grpclb %p] balancer channel in state TRANSIENT_FAILURE; "
+                "[grpclb %p] balancer channel in state:TRANSIENT_FAILURE (%s); "
                 "entering fallback mode",
-                parent_.get());
+                parent_.get(), status.ToString().c_str());
         parent_->fallback_at_startup_checks_pending_ = false;
         grpc_timer_cancel(&parent_->lb_fallback_timer_);
         parent_->fallback_mode_ = true;
@@ -370,6 +375,8 @@ class GrpcLb : public LoadBalancingPolicy {
 
   // Who the client is trying to communicate with.
   const char* server_name_ = nullptr;
+  // Configurations for the policy.
+  RefCountedPtr<GrpcLbConfig> config_;
 
   // Current channel args from the resolver.
   grpc_channel_args* args_ = nullptr;
@@ -415,8 +422,6 @@ class GrpcLb : public LoadBalancingPolicy {
 
   // The child policy to use for the backends.
   OrphanablePtr<LoadBalancingPolicy> child_policy_;
-  // The child policy config.
-  RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config_;
   // Child policy in state READY.
   bool child_policy_ready_ = false;
 };
@@ -655,6 +660,7 @@ RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
 }
 
 void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
+                                 const absl::Status& status,
                                  std::unique_ptr<SubchannelPicker> picker) {
   if (parent_->shutting_down_) return;
   // Record whether child policy reports READY.
@@ -685,16 +691,22 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
        state != GRPC_CHANNEL_READY)) {
     if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
       gpr_log(GPR_INFO,
-              "[grpclb %p helper %p] state=%s passing child picker %p as-is",
-              parent_.get(), this, ConnectivityStateName(state), picker.get());
+              "[grpclb %p helper %p] state=%s (%s) passing "
+              "child picker %p as-is",
+              parent_.get(), this, ConnectivityStateName(state),
+              status.ToString().c_str(), picker.get());
     }
-    parent_->channel_control_helper()->UpdateState(state, std::move(picker));
+    parent_->channel_control_helper()->UpdateState(state, status,
+                                                   std::move(picker));
     return;
   }
   // Cases 2 and 3a: wrap picker from the child in our own picker.
   if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
-    gpr_log(GPR_INFO, "[grpclb %p helper %p] state=%s wrapping child picker %p",
-            parent_.get(), this, ConnectivityStateName(state), picker.get());
+    gpr_log(GPR_INFO,
+            "[grpclb %p helper %p] state=%s (%s) wrapping child "
+            "picker %p",
+            parent_.get(), this, ConnectivityStateName(state),
+            status.ToString().c_str(), picker.get());
   }
   RefCountedPtr<GrpcLbClientStats> client_stats;
   if (parent_->lb_calld_ != nullptr &&
@@ -702,7 +714,7 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
     client_stats = parent_->lb_calld_->client_stats()->Ref();
   }
   parent_->channel_control_helper()->UpdateState(
-      state,
+      state, status,
       absl::make_unique<Picker>(parent_.get(), parent_->serverlist_,
                                 std::move(picker), std::move(client_stats)));
 }
@@ -760,8 +772,11 @@ GrpcLb::BalancerCallState::BalancerCallState(
       nullptr, deadline, nullptr);
   // Init the LB call request payload.
   upb::Arena arena;
-  grpc_slice request_payload_slice =
-      GrpcLbRequestCreate(grpclb_policy()->server_name_, arena.ptr());
+  grpc_slice request_payload_slice = GrpcLbRequestCreate(
+      grpclb_policy()->config_->service_name().empty()
+          ? grpclb_policy()->server_name_
+          : grpclb_policy()->config_->service_name().c_str(),
+      arena.ptr());
   send_message_payload_ =
       grpc_raw_byte_buffer_create(&request_payload_slice, 1);
   grpc_slice_unref_internal(request_payload_slice);
@@ -1387,12 +1402,8 @@ void GrpcLb::ResetBackoffLocked() {
 
 void GrpcLb::UpdateLocked(UpdateArgs args) {
   const bool is_initial_update = lb_channel_ == nullptr;
-  auto* grpclb_config = static_cast<const GrpcLbConfig*>(args.config.get());
-  if (grpclb_config != nullptr) {
-    child_policy_config_ = grpclb_config->child_policy();
-  } else {
-    child_policy_config_ = nullptr;
-  }
+  config_ = args.config;
+  GPR_ASSERT(config_ != nullptr);
   ProcessAddressesAndChannelArgsLocked(args.addresses, *args.args);
   // Update the existing child policy.
   if (child_policy_ != nullptr) CreateOrUpdateChildPolicyLocked();
@@ -1646,7 +1657,7 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
   update_args.args =
       CreateChildPolicyArgsLocked(is_backend_from_grpclb_load_balancer);
   GPR_ASSERT(update_args.args != nullptr);
-  update_args.config = child_policy_config_;
+  update_args.config = config_->child_policy();
   // Create child policy if needed.
   if (child_policy_ == nullptr) {
     child_policy_ = CreateChildPolicyLocked(update_args.args);
@@ -1676,12 +1687,23 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
       const Json& json, grpc_error** error) const override {
     GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
     if (json.type() == Json::Type::JSON_NULL) {
-      return MakeRefCounted<GrpcLbConfig>(nullptr);
+      return MakeRefCounted<GrpcLbConfig>(nullptr, "");
     }
     std::vector<grpc_error*> error_list;
     Json child_policy_config_json_tmp;
     const Json* child_policy_config_json;
-    auto it = json.object_value().find("childPolicy");
+    std::string service_name;
+    auto it = json.object_value().find("serviceName");
+    if (it != json.object_value().end()) {
+      const Json& service_name_json = it->second;
+      if (service_name_json.type() != Json::Type::STRING) {
+        error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
+            "field:serviceName error:type should be string"));
+      } else {
+        service_name = service_name_json.string_value();
+      }
+    }
+    it = json.object_value().find("childPolicy");
     if (it == json.object_value().end()) {
       child_policy_config_json_tmp = Json::Array{Json::Object{
           {"round_robin", Json::Object()},
@@ -1701,7 +1723,8 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
           GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
     }
     if (error_list.empty()) {
-      return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config));
+      return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config),
+                                          std::move(service_name));
     } else {
       *error = GRPC_ERROR_CREATE_FROM_VECTOR("GrpcLb Parser", &error_list);
       return nullptr;

+ 0 - 13
src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc

@@ -23,8 +23,6 @@
 
 // Channel arg key for the list of balancer addresses.
 #define GRPC_ARG_GRPCLB_BALANCER_ADDRESSES "grpc.grpclb_balancer_addresses"
-// Channel arg key for a string indicating an address's balancer name.
-#define GRPC_ARG_ADDRESS_BALANCER_NAME "grpc.address_balancer_name"
 
 namespace grpc_core {
 
@@ -75,15 +73,4 @@ const ServerAddressList* FindGrpclbBalancerAddressesInChannelArgs(
       &args, const_cast<char*>(GRPC_ARG_GRPCLB_BALANCER_ADDRESSES));
 }
 
-grpc_arg CreateGrpclbBalancerNameArg(const char* balancer_name) {
-  return grpc_channel_arg_string_create(
-      const_cast<char*>(GRPC_ARG_ADDRESS_BALANCER_NAME),
-      const_cast<char*>(balancer_name));
-}
-
-const char* FindGrpclbBalancerNameInChannelArgs(const grpc_channel_args& args) {
-  return grpc_channel_args_find_string(
-      &args, const_cast<char*>(GRPC_ARG_ADDRESS_BALANCER_NAME));
-}
-
 }  // namespace grpc_core

+ 0 - 3
src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h

@@ -30,9 +30,6 @@ grpc_arg CreateGrpclbBalancerAddressesArg(
 const ServerAddressList* FindGrpclbBalancerAddressesInChannelArgs(
     const grpc_channel_args& args);
 
-grpc_arg CreateGrpclbBalancerNameArg(const char* balancer_name);
-const char* FindGrpclbBalancerNameInChannelArgs(const grpc_channel_args& args);
-
 }  // namespace grpc_core
 
 #endif /*                                                                         \

+ 1 - 37
src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc

@@ -35,50 +35,14 @@
 #include "src/core/lib/gpr/string.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "src/core/lib/security/credentials/credentials.h"
-#include "src/core/lib/security/transport/target_authority_table.h"
 #include "src/core/lib/slice/slice_internal.h"
 
 namespace grpc_core {
 
-namespace {
-
-int BalancerNameCmp(const grpc_core::UniquePtr<char>& a,
-                    const grpc_core::UniquePtr<char>& b) {
-  return strcmp(a.get(), b.get());
-}
-
-RefCountedPtr<TargetAuthorityTable> CreateTargetAuthorityTable(
-    const ServerAddressList& addresses) {
-  TargetAuthorityTable::Entry* target_authority_entries =
-      static_cast<TargetAuthorityTable::Entry*>(
-          gpr_zalloc(sizeof(*target_authority_entries) * addresses.size()));
-  for (size_t i = 0; i < addresses.size(); ++i) {
-    std::string addr_str =
-        grpc_sockaddr_to_string(&addresses[i].address(), true);
-    target_authority_entries[i].key =
-        grpc_slice_from_copied_string(addr_str.c_str());
-    const char* balancer_name =
-        FindGrpclbBalancerNameInChannelArgs(*addresses[i].args());
-    target_authority_entries[i].value.reset(gpr_strdup(balancer_name));
-  }
-  RefCountedPtr<TargetAuthorityTable> target_authority_table =
-      TargetAuthorityTable::Create(addresses.size(), target_authority_entries,
-                                   BalancerNameCmp);
-  gpr_free(target_authority_entries);
-  return target_authority_table;
-}
-
-}  // namespace
-
 grpc_channel_args* ModifyGrpclbBalancerChannelArgs(
     const ServerAddressList& addresses, grpc_channel_args* args) {
   absl::InlinedVector<const char*, 1> args_to_remove;
-  absl::InlinedVector<grpc_arg, 2> args_to_add;
-  // Add arg for targets info table.
-  RefCountedPtr<TargetAuthorityTable> target_authority_table =
-      CreateTargetAuthorityTable(addresses);
-  args_to_add.emplace_back(
-      CreateTargetAuthorityTableChannelArg(target_authority_table.get()));
+  absl::InlinedVector<grpc_arg, 1> args_to_add;
   // Substitute the channel credentials with a version without call
   // credentials: the load balancer is not necessarily trusted to handle
   // bearer token credentials.

+ 19 - 13
src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc

@@ -30,6 +30,7 @@
 #include "src/core/lib/gprpp/sync.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "src/core/lib/transport/connectivity_state.h"
+#include "src/core/lib/transport/error_utils.h"
 
 namespace grpc_core {
 
@@ -200,7 +201,7 @@ void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
         grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty update"),
                            GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
     channel_control_helper()->UpdateState(
-        GRPC_CHANNEL_TRANSIENT_FAILURE,
+        GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
         absl::make_unique<TransientFailurePicker>(error));
     return;
   }
@@ -318,12 +319,13 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
                 "selected subchannel failed; switching to pending update"),
             GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
         p->channel_control_helper()->UpdateState(
-            GRPC_CHANNEL_TRANSIENT_FAILURE,
+            GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
             absl::make_unique<TransientFailurePicker>(error));
       } else {
         p->channel_control_helper()->UpdateState(
-            GRPC_CHANNEL_CONNECTING, absl::make_unique<QueuePicker>(p->Ref(
-                                         DEBUG_LOCATION, "QueuePicker")));
+            GRPC_CHANNEL_CONNECTING, absl::Status(),
+            absl::make_unique<QueuePicker>(
+                p->Ref(DEBUG_LOCATION, "QueuePicker")));
       }
     } else {
       if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
@@ -338,20 +340,22 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
         p->selected_ = nullptr;
         p->subchannel_list_.reset();
         p->channel_control_helper()->UpdateState(
-            GRPC_CHANNEL_IDLE, absl::make_unique<QueuePicker>(
-                                   p->Ref(DEBUG_LOCATION, "QueuePicker")));
+            GRPC_CHANNEL_IDLE, absl::Status(),
+            absl::make_unique<QueuePicker>(
+                p->Ref(DEBUG_LOCATION, "QueuePicker")));
       } else {
         // This is unlikely but can happen when a subchannel has been asked
         // to reconnect by a different channel and this channel has dropped
         // some connectivity state notifications.
         if (connectivity_state == GRPC_CHANNEL_READY) {
           p->channel_control_helper()->UpdateState(
-              GRPC_CHANNEL_READY,
+              GRPC_CHANNEL_READY, absl::Status(),
               absl::make_unique<Picker>(subchannel()->Ref()));
         } else {  // CONNECTING
           p->channel_control_helper()->UpdateState(
-              connectivity_state, absl::make_unique<QueuePicker>(
-                                      p->Ref(DEBUG_LOCATION, "QueuePicker")));
+              connectivity_state, absl::Status(),
+              absl::make_unique<QueuePicker>(
+                  p->Ref(DEBUG_LOCATION, "QueuePicker")));
         }
       }
     }
@@ -394,7 +398,7 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
                   "failed to connect to all addresses"),
               GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
           p->channel_control_helper()->UpdateState(
-              GRPC_CHANNEL_TRANSIENT_FAILURE,
+              GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
               absl::make_unique<TransientFailurePicker>(error));
         }
       }
@@ -406,8 +410,9 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
       // Only update connectivity state in case 1.
       if (subchannel_list() == p->subchannel_list_.get()) {
         p->channel_control_helper()->UpdateState(
-            GRPC_CHANNEL_CONNECTING, absl::make_unique<QueuePicker>(p->Ref(
-                                         DEBUG_LOCATION, "QueuePicker")));
+            GRPC_CHANNEL_CONNECTING, absl::Status(),
+            absl::make_unique<QueuePicker>(
+                p->Ref(DEBUG_LOCATION, "QueuePicker")));
       }
       break;
     }
@@ -446,7 +451,8 @@ void PickFirst::PickFirstSubchannelData::ProcessUnselectedReadyLocked() {
   }
   p->selected_ = this;
   p->channel_control_helper()->UpdateState(
-      GRPC_CHANNEL_READY, absl::make_unique<Picker>(subchannel()->Ref()));
+      GRPC_CHANNEL_READY, absl::Status(),
+      absl::make_unique<Picker>(subchannel()->Ref()));
   for (size_t i = 0; i < subchannel_list()->num_subchannels(); ++i) {
     if (i != Index()) {
       subchannel_list()->subchannel(i)->ShutdownLocked();

+ 29 - 10
src/core/ext/filters/client_channel/lb_policy/priority/priority.cc

@@ -20,6 +20,7 @@
 #include <limits.h>
 
 #include "absl/strings/str_cat.h"
+#include "absl/strings/str_format.h"
 
 #include <grpc/grpc.h>
 
@@ -33,6 +34,7 @@
 #include "src/core/lib/gprpp/ref_counted_ptr.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "src/core/lib/iomgr/work_serializer.h"
+#include "src/core/lib/transport/error_utils.h"
 
 namespace grpc_core {
 
@@ -113,6 +115,11 @@ class PriorityLb : public LoadBalancingPolicy {
     grpc_connectivity_state connectivity_state() const {
       return connectivity_state_;
     }
+
+    const absl::Status& connectivity_status() const {
+      return connectivity_status_;
+    }
+
     bool failover_timer_callback_pending() const {
       return failover_timer_callback_pending_;
     }
@@ -150,6 +157,7 @@ class PriorityLb : public LoadBalancingPolicy {
       RefCountedPtr<SubchannelInterface> CreateSubchannel(
           const grpc_channel_args& args) override;
       void UpdateState(grpc_connectivity_state state,
+                       const absl::Status& status,
                        std::unique_ptr<SubchannelPicker> picker) override;
       void RequestReresolution() override;
       void AddTraceEvent(TraceSeverity severity,
@@ -164,7 +172,7 @@ class PriorityLb : public LoadBalancingPolicy {
         const grpc_channel_args* args);
 
     void OnConnectivityStateUpdateLocked(
-        grpc_connectivity_state state,
+        grpc_connectivity_state state, const absl::Status& status,
         std::unique_ptr<SubchannelPicker> picker);
 
     void StartFailoverTimerLocked();
@@ -180,6 +188,7 @@ class PriorityLb : public LoadBalancingPolicy {
     OrphanablePtr<LoadBalancingPolicy> child_policy_;
 
     grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_CONNECTING;
+    absl::Status connectivity_status_;
     RefCountedPtr<RefCountedPicker> picker_wrapper_;
 
     // States for delayed removal.
@@ -334,6 +343,7 @@ void PriorityLb::HandleChildConnectivityStateChangeLocked(
       // If it's still READY or IDLE, we stick with this child, so pass
       // the new picker up to our parent.
       channel_control_helper()->UpdateState(child->connectivity_state(),
+                                            child->connectivity_status(),
                                             child->GetPicker());
     } else {
       // If it's no longer READY or IDLE, we should stop using it.
@@ -380,6 +390,7 @@ void PriorityLb::HandleChildConnectivityStateChangeLocked(
   // The current priority has returned a new picker, so pass it up to
   // our parent.
   channel_control_helper()->UpdateState(child->connectivity_state(),
+                                        child->connectivity_status(),
                                         child->GetPicker());
 }
 
@@ -409,7 +420,7 @@ void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
     if (child == nullptr) {
       if (report_connecting) {
         channel_control_helper()->UpdateState(
-            GRPC_CHANNEL_CONNECTING,
+            GRPC_CHANNEL_CONNECTING, absl::Status(),
             absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
       }
       child = MakeOrphanable<ChildPriority>(
@@ -436,7 +447,7 @@ void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
       }
       if (report_connecting) {
         channel_control_helper()->UpdateState(
-            GRPC_CHANNEL_CONNECTING,
+            GRPC_CHANNEL_CONNECTING, absl::Status(),
             absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
       }
       return;
@@ -456,7 +467,7 @@ void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
       GRPC_ERROR_CREATE_FROM_STATIC_STRING("no ready priority"),
       GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
   channel_control_helper()->UpdateState(
-      GRPC_CHANNEL_TRANSIENT_FAILURE,
+      GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
       absl::make_unique<TransientFailurePicker>(error));
 }
 
@@ -476,6 +487,7 @@ void PriorityLb::SelectPriorityLocked(uint32_t priority) {
   // Update picker.
   auto& child = children_[config_->priorities()[priority]];
   channel_control_helper()->UpdateState(child->connectivity_state(),
+                                        child->connectivity_status(),
                                         child->GetPicker());
 }
 
@@ -584,15 +596,18 @@ void PriorityLb::ChildPriority::ResetBackoffLocked() {
 }
 
 void PriorityLb::ChildPriority::OnConnectivityStateUpdateLocked(
-    grpc_connectivity_state state, std::unique_ptr<SubchannelPicker> picker) {
+    grpc_connectivity_state state, const absl::Status& status,
+    std::unique_ptr<SubchannelPicker> picker) {
   if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
     gpr_log(GPR_INFO,
-            "[priority_lb %p] child %s (%p): state update: %s, picker %p",
+            "[priority_lb %p] child %s (%p): state update: %s (%s) picker %p",
             priority_policy_.get(), name_.c_str(), this,
-            ConnectivityStateName(state), picker.get());
+            ConnectivityStateName(state), status.ToString().c_str(),
+            picker.get());
   }
   // Store the state and picker.
   connectivity_state_ = state;
+  connectivity_status_ = status;
   picker_wrapper_ = MakeRefCounted<RefCountedPicker>(std::move(picker));
   // If READY or TRANSIENT_FAILURE, cancel failover timer.
   if (state == GRPC_CHANNEL_READY || state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
@@ -646,7 +661,10 @@ void PriorityLb::ChildPriority::OnFailoverTimerLocked(grpc_error* error) {
               priority_policy_.get(), name_.c_str(), this);
     }
     failover_timer_callback_pending_ = false;
-    OnConnectivityStateUpdateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE, nullptr);
+    OnConnectivityStateUpdateLocked(
+        GRPC_CHANNEL_TRANSIENT_FAILURE,
+        absl::Status(absl::StatusCode::kUnavailable, "failover timer fired"),
+        nullptr);
   }
   Unref(DEBUG_LOCATION, "ChildPriority+OnFailoverTimerLocked");
   GRPC_ERROR_UNREF(error);
@@ -725,10 +743,11 @@ PriorityLb::ChildPriority::Helper::CreateSubchannel(
 }
 
 void PriorityLb::ChildPriority::Helper::UpdateState(
-    grpc_connectivity_state state, std::unique_ptr<SubchannelPicker> picker) {
+    grpc_connectivity_state state, const absl::Status& status,
+    std::unique_ptr<SubchannelPicker> picker) {
   if (priority_->priority_policy_->shutting_down_) return;
   // Notify the priority.
-  priority_->OnConnectivityStateUpdateLocked(state, std::move(picker));
+  priority_->OnConnectivityStateUpdateLocked(state, status, std::move(picker));
 }
 
 void PriorityLb::ChildPriority::Helper::AddTraceEvent(

+ 5 - 4
src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc

@@ -40,6 +40,7 @@
 #include "src/core/lib/gprpp/sync.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "src/core/lib/transport/connectivity_state.h"
+#include "src/core/lib/transport/error_utils.h"
 #include "src/core/lib/transport/static_metadata.h"
 
 namespace grpc_core {
@@ -322,11 +323,11 @@ void RoundRobin::RoundRobinSubchannelList::
   if (num_ready_ > 0) {
     /* 1) READY */
     p->channel_control_helper()->UpdateState(
-        GRPC_CHANNEL_READY, absl::make_unique<Picker>(p, this));
+        GRPC_CHANNEL_READY, absl::Status(), absl::make_unique<Picker>(p, this));
   } else if (num_connecting_ > 0) {
     /* 2) CONNECTING */
     p->channel_control_helper()->UpdateState(
-        GRPC_CHANNEL_CONNECTING,
+        GRPC_CHANNEL_CONNECTING, absl::Status(),
         absl::make_unique<QueuePicker>(p->Ref(DEBUG_LOCATION, "QueuePicker")));
   } else if (num_transient_failure_ == num_subchannels()) {
     /* 3) TRANSIENT_FAILURE */
@@ -335,7 +336,7 @@ void RoundRobin::RoundRobinSubchannelList::
                                "connections to all backends failing"),
                            GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
     p->channel_control_helper()->UpdateState(
-        GRPC_CHANNEL_TRANSIENT_FAILURE,
+        GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
         absl::make_unique<TransientFailurePicker>(error));
   }
 }
@@ -452,7 +453,7 @@ void RoundRobin::UpdateLocked(UpdateArgs args) {
         grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty update"),
                            GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
     channel_control_helper()->UpdateState(
-        GRPC_CHANNEL_TRANSIENT_FAILURE,
+        GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
         absl::make_unique<TransientFailurePicker>(error));
     subchannel_list_ = std::move(latest_pending_subchannel_list_);
   } else if (subchannel_list_ == nullptr) {

+ 23 - 13
src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc

@@ -36,6 +36,7 @@
 #include "src/core/lib/gprpp/ref_counted_ptr.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "src/core/lib/iomgr/work_serializer.h"
+#include "src/core/lib/transport/error_utils.h"
 
 namespace grpc_core {
 
@@ -146,6 +147,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
       RefCountedPtr<SubchannelInterface> CreateSubchannel(
           const grpc_channel_args& args) override;
       void UpdateState(grpc_connectivity_state state,
+                       const absl::Status& status,
                        std::unique_ptr<SubchannelPicker> picker) override;
       void RequestReresolution() override;
       void AddTraceEvent(TraceSeverity severity,
@@ -160,7 +162,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
         const grpc_channel_args* args);
 
     void OnConnectivityStateUpdateLocked(
-        grpc_connectivity_state state,
+        grpc_connectivity_state state, const absl::Status& status,
         std::unique_ptr<SubchannelPicker> picker);
 
     static void OnDelayedRemovalTimer(void* arg, grpc_error* error);
@@ -169,7 +171,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
     // The owning LB policy.
     RefCountedPtr<WeightedTargetLb> weighted_target_policy_;
 
-    const std::string& name_;
+    const std::string name_;
 
     uint32_t weight_;
 
@@ -288,9 +290,8 @@ void WeightedTargetLb::UpdateLocked(UpdateArgs args) {
     const std::string& name = p.first;
     auto it = targets_.find(name);
     if (it == targets_.end()) {
-      it = targets_.emplace(std::make_pair(name, nullptr)).first;
-      it->second = MakeOrphanable<WeightedChild>(
-          Ref(DEBUG_LOCATION, "WeightedChild"), it->first);
+      targets_.emplace(name, MakeOrphanable<WeightedChild>(
+                                 Ref(DEBUG_LOCATION, "WeightedChild"), name));
     }
   }
   // Update all children.
@@ -375,6 +376,7 @@ void WeightedTargetLb::UpdateStateLocked() {
             this, ConnectivityStateName(connectivity_state));
   }
   std::unique_ptr<SubchannelPicker> picker;
+  absl::Status status;
   switch (connectivity_state) {
     case GRPC_CHANNEL_READY:
       picker = absl::make_unique<WeightedPicker>(std::move(picker_list));
@@ -385,11 +387,15 @@ void WeightedTargetLb::UpdateStateLocked() {
           absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
       break;
     default:
-      picker = absl::make_unique<TransientFailurePicker>(
+      grpc_error* error = grpc_error_set_int(
           GRPC_ERROR_CREATE_FROM_STATIC_STRING(
-              "weighted_target: all children report state TRANSIENT_FAILURE"));
+              "weighted_target: all children report state TRANSIENT_FAILURE"),
+          GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
+      status = grpc_error_to_absl_status(error);
+      picker = absl::make_unique<TransientFailurePicker>(error);
   }
-  channel_control_helper()->UpdateState(connectivity_state, std::move(picker));
+  channel_control_helper()->UpdateState(connectivity_state, status,
+                                        std::move(picker));
 }
 
 //
@@ -508,15 +514,17 @@ void WeightedTargetLb::WeightedChild::ResetBackoffLocked() {
 }
 
 void WeightedTargetLb::WeightedChild::OnConnectivityStateUpdateLocked(
-    grpc_connectivity_state state, std::unique_ptr<SubchannelPicker> picker) {
+    grpc_connectivity_state state, const absl::Status& status,
+    std::unique_ptr<SubchannelPicker> picker) {
   // Cache the picker in the WeightedChild.
   picker_wrapper_ = MakeRefCounted<ChildPickerWrapper>(std::move(picker));
   if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_weighted_target_trace)) {
     gpr_log(GPR_INFO,
             "[weighted_target_lb %p] WeightedChild %p %s: connectivity "
-            "state update: state=%s picker_wrapper=%p",
+            "state update: state=%s (%s) picker_wrapper=%p",
             weighted_target_policy_.get(), this, name_.c_str(),
-            ConnectivityStateName(state), picker_wrapper_.get());
+            ConnectivityStateName(state), status.ToString().c_str(),
+            picker_wrapper_.get());
   }
   // If the child reports IDLE, immediately tell it to exit idle.
   if (state == GRPC_CHANNEL_IDLE) child_policy_->ExitIdleLocked();
@@ -589,9 +597,11 @@ WeightedTargetLb::WeightedChild::Helper::CreateSubchannel(
 }
 
 void WeightedTargetLb::WeightedChild::Helper::UpdateState(
-    grpc_connectivity_state state, std::unique_ptr<SubchannelPicker> picker) {
+    grpc_connectivity_state state, const absl::Status& status,
+    std::unique_ptr<SubchannelPicker> picker) {
   if (weighted_child_->weighted_target_policy_->shutting_down_) return;
-  weighted_child_->OnConnectivityStateUpdateLocked(state, std::move(picker));
+  weighted_child_->OnConnectivityStateUpdateLocked(state, status,
+                                                   std::move(picker));
 }
 
 void WeightedTargetLb::WeightedChild::Helper::RequestReresolution() {

+ 17 - 11
src/core/ext/filters/client_channel/lb_policy/xds/cds.cc

@@ -29,6 +29,7 @@
 #include "src/core/lib/gprpp/memory.h"
 #include "src/core/lib/gprpp/orphanable.h"
 #include "src/core/lib/gprpp/ref_counted_ptr.h"
+#include "src/core/lib/transport/error_utils.h"
 
 namespace grpc_core {
 
@@ -79,7 +80,7 @@ class CdsLb : public LoadBalancingPolicy {
     explicit Helper(RefCountedPtr<CdsLb> parent) : parent_(std::move(parent)) {}
     RefCountedPtr<SubchannelInterface> CreateSubchannel(
         const grpc_channel_args& args) override;
-    void UpdateState(grpc_connectivity_state state,
+    void UpdateState(grpc_connectivity_state state, const absl::Status& status,
                      std::unique_ptr<SubchannelPicker> picker) override;
     void RequestReresolution() override;
     void AddTraceEvent(TraceSeverity severity,
@@ -209,7 +210,7 @@ void CdsLb::ClusterWatcher::OnError(grpc_error* error) {
   // we keep running with the data we had previously.
   if (parent_->child_policy_ == nullptr) {
     parent_->channel_control_helper()->UpdateState(
-        GRPC_CHANNEL_TRANSIENT_FAILURE,
+        GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
         absl::make_unique<TransientFailurePicker>(error));
   } else {
     GRPC_ERROR_UNREF(error);
@@ -221,13 +222,15 @@ void CdsLb::ClusterWatcher::OnResourceDoesNotExist() {
           "[cdslb %p] CDS resource for %s does not exist -- reporting "
           "TRANSIENT_FAILURE",
           parent_.get(), parent_->config_->cluster().c_str());
+  grpc_error* error = grpc_error_set_int(
+      GRPC_ERROR_CREATE_FROM_COPIED_STRING(
+          absl::StrCat("CDS resource \"", parent_->config_->cluster(),
+                       "\" does not exist")
+              .c_str()),
+      GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
   parent_->channel_control_helper()->UpdateState(
-      GRPC_CHANNEL_TRANSIENT_FAILURE,
-      absl::make_unique<TransientFailurePicker>(
-          GRPC_ERROR_CREATE_FROM_COPIED_STRING(
-              absl::StrCat("CDS resource \"", parent_->config_->cluster(),
-                           "\" does not exist")
-                  .c_str())));
+      GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
+      absl::make_unique<TransientFailurePicker>(error));
   parent_->MaybeDestroyChildPolicyLocked();
 }
 
@@ -242,13 +245,16 @@ RefCountedPtr<SubchannelInterface> CdsLb::Helper::CreateSubchannel(
 }
 
 void CdsLb::Helper::UpdateState(grpc_connectivity_state state,
+                                const absl::Status& status,
                                 std::unique_ptr<SubchannelPicker> picker) {
   if (parent_->shutting_down_ || parent_->child_policy_ == nullptr) return;
   if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
-    gpr_log(GPR_INFO, "[cdslb %p] state updated by child: %s", this,
-            ConnectivityStateName(state));
+    gpr_log(GPR_INFO,
+            "[cdslb %p] state updated by child: %s message_state: (%s)", this,
+            ConnectivityStateName(state), status.ToString().c_str());
   }
-  parent_->channel_control_helper()->UpdateState(state, std::move(picker));
+  parent_->channel_control_helper()->UpdateState(state, status,
+                                                 std::move(picker));
 }
 
 void CdsLb::Helper::RequestReresolution() {

+ 19 - 11
src/core/ext/filters/client_channel/lb_policy/xds/eds.cc

@@ -40,6 +40,7 @@
 #include "src/core/lib/gprpp/ref_counted_ptr.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "src/core/lib/iomgr/work_serializer.h"
+#include "src/core/lib/transport/error_utils.h"
 #include "src/core/lib/uri/uri_parser.h"
 
 #define GRPC_EDS_DEFAULT_FALLBACK_TIMEOUT 10000
@@ -133,7 +134,7 @@ class EdsLb : public LoadBalancingPolicy {
 
     RefCountedPtr<SubchannelInterface> CreateSubchannel(
         const grpc_channel_args& args) override;
-    void UpdateState(grpc_connectivity_state state,
+    void UpdateState(grpc_connectivity_state state, const absl::Status& status,
                      std::unique_ptr<SubchannelPicker> picker) override;
     // This is a no-op, because we get the addresses from the xds
     // client, which is a watch-based API.
@@ -214,6 +215,7 @@ class EdsLb : public LoadBalancingPolicy {
 
   // The latest state and picker returned from the child policy.
   grpc_connectivity_state child_state_;
+  absl::Status child_status_;
   RefCountedPtr<ChildPickerWrapper> child_picker_;
 };
 
@@ -265,16 +267,21 @@ RefCountedPtr<SubchannelInterface> EdsLb::Helper::CreateSubchannel(
 }
 
 void EdsLb::Helper::UpdateState(grpc_connectivity_state state,
+                                const absl::Status& status,
                                 std::unique_ptr<SubchannelPicker> picker) {
   if (eds_policy_->shutting_down_ || eds_policy_->child_policy_ == nullptr) {
     return;
   }
   if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
-    gpr_log(GPR_INFO, "[edslb %p] child policy updated state=%s picker=%p",
-            eds_policy_.get(), ConnectivityStateName(state), picker.get());
+    gpr_log(GPR_INFO,
+            "[edslb %p] child policy updated state=%s (%s) "
+            "picker=%p",
+            eds_policy_.get(), ConnectivityStateName(state),
+            status.ToString().c_str(), picker.get());
   }
   // Save the state and picker.
   eds_policy_->child_state_ = state;
+  eds_policy_->child_status_ = status;
   eds_policy_->child_picker_ =
       MakeRefCounted<ChildPickerWrapper>(std::move(picker));
   // Wrap the picker in a DropPicker and pass it up.
@@ -339,7 +346,7 @@ class EdsLb::EndpointWatcher : public XdsClient::EndpointWatcherInterface {
     // we keep running with the data we had previously.
     if (eds_policy_->child_policy_ == nullptr) {
       eds_policy_->channel_control_helper()->UpdateState(
-          GRPC_CHANNEL_TRANSIENT_FAILURE,
+          GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
           absl::make_unique<TransientFailurePicker>(error));
     } else {
       GRPC_ERROR_UNREF(error);
@@ -351,11 +358,12 @@ class EdsLb::EndpointWatcher : public XdsClient::EndpointWatcherInterface {
         GPR_ERROR,
         "[edslb %p] EDS resource does not exist -- reporting TRANSIENT_FAILURE",
         eds_policy_.get());
+    grpc_error* error = grpc_error_set_int(
+        GRPC_ERROR_CREATE_FROM_STATIC_STRING("EDS resource does not exist"),
+        GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
     eds_policy_->channel_control_helper()->UpdateState(
-        GRPC_CHANNEL_TRANSIENT_FAILURE,
-        absl::make_unique<TransientFailurePicker>(
-            GRPC_ERROR_CREATE_FROM_STATIC_STRING(
-                "EDS resource does not exist")));
+        GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
+        absl::make_unique<TransientFailurePicker>(error));
     eds_policy_->MaybeDestroyChildPolicyLocked();
   }
 
@@ -688,7 +696,7 @@ EdsLb::CreateChildPolicyConfigLocked() {
             error),
         GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
     channel_control_helper()->UpdateState(
-        GRPC_CHANNEL_TRANSIENT_FAILURE,
+        GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
         absl::make_unique<TransientFailurePicker>(error));
     return nullptr;
   }
@@ -769,13 +777,13 @@ void EdsLb::MaybeUpdateDropPickerLocked() {
   // If we're dropping all calls, report READY, regardless of what (or
   // whether) the child has reported.
   if (drop_config_ != nullptr && drop_config_->drop_all()) {
-    channel_control_helper()->UpdateState(GRPC_CHANNEL_READY,
+    channel_control_helper()->UpdateState(GRPC_CHANNEL_READY, absl::Status(),
                                           absl::make_unique<DropPicker>(this));
     return;
   }
   // Update only if we have a child picker.
   if (child_picker_ != nullptr) {
-    channel_control_helper()->UpdateState(child_state_,
+    channel_control_helper()->UpdateState(child_state_, child_status_,
                                           absl::make_unique<DropPicker>(this));
   }
 }

+ 16 - 7
src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc

@@ -120,7 +120,7 @@ class LrsLb : public LoadBalancingPolicy {
 
     RefCountedPtr<SubchannelInterface> CreateSubchannel(
         const grpc_channel_args& args) override;
-    void UpdateState(grpc_connectivity_state state,
+    void UpdateState(grpc_connectivity_state state, const absl::Status& status,
                      std::unique_ptr<SubchannelPicker> picker) override;
     void RequestReresolution() override;
     void AddTraceEvent(TraceSeverity severity,
@@ -157,6 +157,7 @@ class LrsLb : public LoadBalancingPolicy {
 
   // Latest state and picker reported by the child policy.
   grpc_connectivity_state state_ = GRPC_CHANNEL_IDLE;
+  absl::Status status_;
   RefCountedPtr<RefCountedPicker> picker_;
 };
 
@@ -266,10 +267,14 @@ void LrsLb::MaybeUpdatePickerLocked() {
     auto lrs_picker =
         absl::make_unique<LoadReportingPicker>(picker_, locality_stats_);
     if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_lrs_trace)) {
-      gpr_log(GPR_INFO, "[lrs_lb %p] updating connectivity: state=%s picker=%p",
-              this, ConnectivityStateName(state_), lrs_picker.get());
+      gpr_log(
+          GPR_INFO,
+          "[lrs_lb %p] updating connectivity: state=%s status=(%s) picker=%p",
+          this, ConnectivityStateName(state_), status_.ToString().c_str(),
+          lrs_picker.get());
     }
-    channel_control_helper()->UpdateState(state_, std::move(lrs_picker));
+    channel_control_helper()->UpdateState(state_, status_,
+                                          std::move(lrs_picker));
   }
 }
 
@@ -325,15 +330,19 @@ RefCountedPtr<SubchannelInterface> LrsLb::Helper::CreateSubchannel(
 }
 
 void LrsLb::Helper::UpdateState(grpc_connectivity_state state,
+                                const absl::Status& status,
                                 std::unique_ptr<SubchannelPicker> picker) {
   if (lrs_policy_->shutting_down_) return;
   if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_lrs_trace)) {
-    gpr_log(GPR_INFO,
-            "[lrs_lb %p] child connectivity state update: state=%s picker=%p",
-            lrs_policy_.get(), ConnectivityStateName(state), picker.get());
+    gpr_log(
+        GPR_INFO,
+        "[lrs_lb %p] child connectivity state update: state=%s (%s) picker=%p",
+        lrs_policy_.get(), ConnectivityStateName(state),
+        status.ToString().c_str(), picker.get());
   }
   // Save the state and picker.
   lrs_policy_->state_ = state;
+  lrs_policy_->status_ = status;
   lrs_policy_->picker_ = MakeRefCounted<RefCountedPicker>(std::move(picker));
   // Wrap the picker and return it to the channel.
   lrs_policy_->MaybeUpdatePickerLocked();

+ 66 - 33
src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc

@@ -20,9 +20,11 @@
 #include <limits.h>
 #include <string.h>
 
+#include "absl/container/inlined_vector.h"
 #include "absl/strings/match.h"
 #include "absl/strings/numbers.h"
 #include "absl/strings/str_cat.h"
+#include "absl/strings/str_join.h"
 #include "absl/strings/str_split.h"
 #include "absl/strings/string_view.h"
 #include "re2/re2.h"
@@ -40,6 +42,7 @@
 #include "src/core/lib/gprpp/ref_counted_ptr.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "src/core/lib/iomgr/work_serializer.h"
+#include "src/core/lib/transport/error_utils.h"
 
 #define GRPC_XDS_ROUTING_CHILD_RETENTION_INTERVAL_MS (15 * 60 * 1000)
 
@@ -116,8 +119,8 @@ class XdsRoutingLb : public LoadBalancingPolicy {
     // Maintains an ordered xds route table as provided by RDS response.
     using RouteTable = std::vector<Route>;
 
-    explicit RoutePicker(RouteTable route_table,
-                         RefCountedPtr<XdsRoutingLbConfig> config)
+    RoutePicker(RouteTable route_table,
+                RefCountedPtr<XdsRoutingLbConfig> config)
         : route_table_(std::move(route_table)), config_(std::move(config)) {}
 
     PickResult Pick(PickArgs args) override;
@@ -163,6 +166,7 @@ class XdsRoutingLb : public LoadBalancingPolicy {
       RefCountedPtr<SubchannelInterface> CreateSubchannel(
           const grpc_channel_args& args) override;
       void UpdateState(grpc_connectivity_state state,
+                       const absl::Status& status,
                        std::unique_ptr<SubchannelPicker> picker) override;
       void RequestReresolution() override;
       void AddTraceEvent(TraceSeverity severity,
@@ -183,7 +187,7 @@ class XdsRoutingLb : public LoadBalancingPolicy {
     RefCountedPtr<XdsRoutingLb> xds_routing_policy_;
 
     // Points to the corresponding key in XdsRoutingLb::actions_.
-    const std::string& name_;
+    const std::string name_;
 
     OrphanablePtr<LoadBalancingPolicy> child_policy_;
 
@@ -218,21 +222,6 @@ class XdsRoutingLb : public LoadBalancingPolicy {
 // XdsRoutingLb::RoutePicker
 //
 
-absl::optional<absl::string_view> GetMetadataValue(
-    const std::string& key,
-    LoadBalancingPolicy::MetadataInterface* initial_metadata) {
-  // TODO(roth): Using const auto& here trigger a warning in a macos or windows
-  // build:
-  //*(args.initial_metadata) is returning values not references.
-  GPR_DEBUG_ASSERT(initial_metadata != nullptr);
-  for (const auto p : *(initial_metadata)) {
-    if (p.first == key) {
-      return p.second;
-    }
-  }
-  return absl::nullopt;
-}
-
 bool PathMatch(
     const absl::string_view& path,
     const XdsApi::RdsUpdate::RdsRoute::Matchers::PathMatcher& path_matcher) {
@@ -251,10 +240,44 @@ bool PathMatch(
   }
 }
 
+absl::optional<absl::string_view> GetMetadataValue(
+    const std::string& key,
+    LoadBalancingPolicy::MetadataInterface* initial_metadata,
+    std::string* concatenated_value) {
+  // Find all values for the specified key.
+  GPR_DEBUG_ASSERT(initial_metadata != nullptr);
+  absl::InlinedVector<absl::string_view, 1> values;
+  for (const auto p : *initial_metadata) {
+    if (p.first == key) values.push_back(p.second);
+  }
+  // If none found, no match.
+  if (values.empty()) return absl::nullopt;
+  // If exactly one found, return it as-is.
+  if (values.size() == 1) return values.front();
+  // If more than one found, concatenate the values, using
+  // *concatenated_values as a temporary holding place for the
+  // concatenated string.
+  *concatenated_value = absl::StrJoin(values, ",");
+  return *concatenated_value;
+}
+
 bool HeaderMatchHelper(
     const XdsApi::RdsUpdate::RdsRoute::Matchers::HeaderMatcher& header_matcher,
     LoadBalancingPolicy::MetadataInterface* initial_metadata) {
-  auto value = GetMetadataValue(header_matcher.name, initial_metadata);
+  std::string concatenated_value;
+  absl::optional<absl::string_view> value;
+  // Note: If we ever allow binary headers here, we still need to
+  // special-case ignore "grpc-tags-bin" and "grpc-trace-bin", since
+  // they are not visible to the LB policy in grpc-go.
+  if (absl::EndsWith(header_matcher.name, "-bin") ||
+      header_matcher.name == "grpc-previous-rpc-attempts") {
+    value = absl::nullopt;
+  } else if (header_matcher.name == "content-type") {
+    value = "application/grpc";
+  } else {
+    value = GetMetadataValue(header_matcher.name, initial_metadata,
+                             &concatenated_value);
+  }
   if (!value.has_value()) {
     if (header_matcher.type == XdsApi::RdsUpdate::RdsRoute::Matchers::
                                    HeaderMatcher::HeaderMatcherType::PRESENT) {
@@ -292,11 +315,11 @@ bool HeaderMatchHelper(
 }
 
 bool HeadersMatch(
-    LoadBalancingPolicy::PickArgs args,
     const std::vector<XdsApi::RdsUpdate::RdsRoute::Matchers::HeaderMatcher>&
-        header_matchers) {
+        header_matchers,
+    LoadBalancingPolicy::MetadataInterface* initial_metadata) {
   for (const auto& header_matcher : header_matchers) {
-    bool match = HeaderMatchHelper(header_matcher, args.initial_metadata);
+    bool match = HeaderMatchHelper(header_matcher, initial_metadata);
     if (header_matcher.invert_match) match = !match;
     if (!match) return false;
   }
@@ -314,11 +337,14 @@ XdsRoutingLb::PickResult XdsRoutingLb::RoutePicker::Pick(PickArgs args) {
     // Path matching.
     if (!PathMatch(args.path, route.matchers->path_matcher)) continue;
     // Header Matching.
-    if (!HeadersMatch(args, route.matchers->header_matchers)) continue;
+    if (!HeadersMatch(route.matchers->header_matchers, args.initial_metadata)) {
+      continue;
+    }
     // Match fraction check
     if (route.matchers->fraction_per_million.has_value() &&
-        !UnderFraction(route.matchers->fraction_per_million.value()))
+        !UnderFraction(route.matchers->fraction_per_million.value())) {
       continue;
+    }
     // Found a match
     return route.picker->Pick(args);
   }
@@ -381,9 +407,10 @@ void XdsRoutingLb::UpdateLocked(UpdateArgs args) {
     const RefCountedPtr<LoadBalancingPolicy::Config>& config = p.second;
     auto it = actions_.find(name);
     if (it == actions_.end()) {
-      it = actions_.emplace(std::make_pair(name, nullptr)).first;
-      it->second = MakeOrphanable<XdsRoutingChild>(
-          Ref(DEBUG_LOCATION, "XdsRoutingChild"), it->first);
+      it = actions_
+               .emplace(name, MakeOrphanable<XdsRoutingChild>(
+                                  Ref(DEBUG_LOCATION, "XdsRoutingChild"), name))
+               .first;
     }
     it->second->UpdateLocked(config, args.addresses, args.args);
   }
@@ -440,6 +467,7 @@ void XdsRoutingLb::UpdateStateLocked() {
             ConnectivityStateName(connectivity_state));
   }
   std::unique_ptr<SubchannelPicker> picker;
+  absl::Status status;
   switch (connectivity_state) {
     case GRPC_CHANNEL_READY: {
       RoutePicker::RouteTable route_table;
@@ -469,12 +497,15 @@ void XdsRoutingLb::UpdateStateLocked() {
           absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
       break;
     default:
-      picker = absl::make_unique<TransientFailurePicker>(grpc_error_set_int(
+      grpc_error* error = grpc_error_set_int(
           GRPC_ERROR_CREATE_FROM_STATIC_STRING(
               "TRANSIENT_FAILURE from XdsRoutingLb"),
-          GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
+          GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
+      status = grpc_error_to_absl_status(error);
+      picker = absl::make_unique<TransientFailurePicker>(error);
   }
-  channel_control_helper()->UpdateState(connectivity_state, std::move(picker));
+  channel_control_helper()->UpdateState(connectivity_state, status,
+                                        std::move(picker));
 }
 
 //
@@ -630,13 +661,15 @@ XdsRoutingLb::XdsRoutingChild::Helper::CreateSubchannel(
 }
 
 void XdsRoutingLb::XdsRoutingChild::Helper::UpdateState(
-    grpc_connectivity_state state, std::unique_ptr<SubchannelPicker> picker) {
+    grpc_connectivity_state state, const absl::Status& status,
+    std::unique_ptr<SubchannelPicker> picker) {
   if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_routing_lb_trace)) {
     gpr_log(GPR_INFO,
-            "[xds_routing_lb %p] child %s: received update: state=%s picker=%p",
+            "[xds_routing_lb %p] child %s: received update: state=%s (%s) "
+            "picker=%p",
             xds_routing_child_->xds_routing_policy_.get(),
             xds_routing_child_->name_.c_str(), ConnectivityStateName(state),
-            picker.get());
+            status.ToString().c_str(), picker.get());
   }
   if (xds_routing_child_->xds_routing_policy_->shutting_down_) return;
   // Cache the picker in the XdsRoutingChild.

+ 5 - 2
src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc

@@ -25,6 +25,7 @@
 #include <string.h>
 
 #include "absl/container/inlined_vector.h"
+#include "absl/strings/str_cat.h"
 
 #include <grpc/support/alloc.h>
 #include <grpc/support/string_util.h>
@@ -370,9 +371,11 @@ void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
   } else {
     GRPC_CARES_TRACE_LOG("resolver:%p dns resolution failed: %s", this,
                          grpc_error_string(error));
+    std::string error_message =
+        absl::StrCat("DNS resolution failed for service: ", name_to_resolve_);
     result_handler()->ReturnError(grpc_error_set_int(
-        GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
-            "DNS resolution failed", &error, 1),
+        GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(error_message.c_str(),
+                                                         &error, 1),
         GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
     // Set retry timer.
     grpc_millis next_try = backoff_.NextAttemptTime();

+ 2 - 1
src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc

@@ -99,7 +99,8 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
 };
 
 std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
-    std::shared_ptr<WorkSerializer> work_serializer) { /* NOLINT */
+    std::shared_ptr<WorkSerializer> work_serializer) {
+  (void)work_serializer;
   return absl::make_unique<GrpcPolledFdFactoryPosix>();
 }
 

+ 2 - 2
src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc

@@ -102,11 +102,11 @@ class GrpcPolledFdWindows {
   GrpcPolledFdWindows(ares_socket_t as,
                       std::shared_ptr<WorkSerializer> work_serializer,
                       int address_family, int socket_type)
-      : name_(absl::StrFormat("c-ares socket: %" PRIdPTR, as)),
-        work_serializer_(std::move(work_serializer)),
+      : work_serializer_(std::move(work_serializer)),
         read_buf_(grpc_empty_slice()),
         write_buf_(grpc_empty_slice()),
         tcp_write_state_(WRITE_IDLE),
+        name_(absl::StrFormat("c-ares socket: %" PRIdPTR, as)),
         gotten_into_driver_list_(false),
         address_family_(address_family),
         socket_type_(socket_type) {

+ 3 - 3
src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc

@@ -37,7 +37,6 @@
 #include <grpc/support/time.h>
 
 #include <address_sorting/address_sorting.h>
-#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
 #include "src/core/ext/filters/client_channel/parse_address.h"
 #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h"
 #include "src/core/lib/gpr/string.h"
@@ -47,6 +46,7 @@
 #include "src/core/lib/iomgr/iomgr_internal.h"
 #include "src/core/lib/iomgr/nameser.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
+#include "src/core/lib/transport/authority_override.h"
 
 using grpc_core::ServerAddress;
 using grpc_core::ServerAddressList;
@@ -237,7 +237,7 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
       absl::InlinedVector<grpc_arg, 1> args_to_add;
       if (hr->is_balancer) {
         args_to_add.emplace_back(
-            grpc_core::CreateGrpclbBalancerNameArg(hr->host));
+            grpc_core::CreateAuthorityOverrideChannelArg(hr->host));
       }
       grpc_channel_args* args = grpc_channel_args_copy_and_add(
           nullptr, args_to_add.data(), args_to_add.size());
@@ -619,7 +619,7 @@ static bool grpc_ares_maybe_resolve_localhost_manually_locked(
 }
 #else  /* GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY */
 static bool grpc_ares_maybe_resolve_localhost_manually_locked(
-    const grpc_ares_request* r, const char* /*name*/,
+    const grpc_ares_request* /*r*/, const char* /*name*/,
     const char* /*default_port*/,
     std::unique_ptr<grpc_core::ServerAddressList>* /*addrs*/) {
   return false;

+ 6 - 2
src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc

@@ -22,6 +22,8 @@
 #include <climits>
 #include <cstring>
 
+#include "absl/strings/str_cat.h"
+
 #include <grpc/support/alloc.h>
 #include <grpc/support/string_util.h>
 #include <grpc/support/time.h>
@@ -195,9 +197,11 @@ void NativeDnsResolver::OnResolvedLocked(grpc_error* error) {
     gpr_log(GPR_INFO, "dns resolution failed (will retry): %s",
             grpc_error_string(error));
     // Return transient error.
+    std::string error_message =
+        absl::StrCat("DNS resolution failed for service: ", name_to_resolve_);
     result_handler()->ReturnError(grpc_error_set_int(
-        GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
-            "DNS resolution failed", &error, 1),
+        GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(error_message.c_str(),
+                                                         &error, 1),
         GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
     // Set up for retry.
     grpc_millis next_try = backoff_.NextAttemptTime();

+ 21 - 18
src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc

@@ -18,8 +18,11 @@
 
 #include <grpc/support/port_platform.h>
 
+#include "src/core/ext/filters/client_channel/config_selector.h"
 #include "src/core/ext/filters/client_channel/resolver_registry.h"
 #include "src/core/ext/filters/client_channel/xds/xds_client.h"
+#include "src/core/lib/channel/channel_args.h"
+#include "src/core/lib/transport/timeout_encoding.h"
 
 namespace grpc_core {
 
@@ -37,7 +40,8 @@ class XdsResolver : public Resolver {
       : Resolver(std::move(args.work_serializer),
                  std::move(args.result_handler)),
         args_(grpc_channel_args_copy(args.args)),
-        interested_parties_(args.pollset_set) {
+        interested_parties_(args.pollset_set),
+        config_selector_(MakeRefCounted<XdsConfigSelector>()) {
     char* path = args.uri->path;
     if (path[0] == '/') ++path;
     server_name_ = path;
@@ -77,10 +81,18 @@ class XdsResolver : public Resolver {
     RefCountedPtr<XdsResolver> resolver_;
   };
 
+  class XdsConfigSelector : public ConfigSelector {
+   public:
+    CallConfig GetCallConfig(GetCallConfigArgs args) override {
+      return CallConfig();
+    }
+  };
+
   std::string server_name_;
   const grpc_channel_args* args_;
   grpc_pollset_set* interested_parties_;
   OrphanablePtr<XdsClient> xds_client_;
+  RefCountedPtr<XdsConfigSelector> config_selector_;
 };
 
 void XdsResolver::ServiceConfigWatcher::OnServiceConfigChanged(
@@ -90,10 +102,13 @@ void XdsResolver::ServiceConfigWatcher::OnServiceConfigChanged(
     gpr_log(GPR_INFO, "[xds_resolver %p] received updated service config: %s",
             resolver_.get(), service_config->json_string().c_str());
   }
-  grpc_arg xds_client_arg = resolver_->xds_client_->MakeChannelArg();
+  grpc_arg new_args[] = {
+      resolver_->xds_client_->MakeChannelArg(),
+      resolver_->config_selector_->MakeChannelArg(),
+  };
   Result result;
-  result.args =
-      grpc_channel_args_copy_and_add(resolver_->args_, &xds_client_arg, 1);
+  result.args = grpc_channel_args_copy_and_add(resolver_->args_, new_args,
+                                               GPR_ARRAY_SIZE(new_args));
   result.service_config = std::move(service_config);
   resolver_->result_handler()->ReturnResult(std::move(result));
 }
@@ -144,8 +159,6 @@ void XdsResolver::StartLocked() {
 
 class XdsResolverFactory : public ResolverFactory {
  public:
-  explicit XdsResolverFactory(const char* scheme) : scheme_(scheme) {}
-
   bool IsValidUri(const grpc_uri* uri) const override {
     if (GPR_UNLIKELY(0 != strcmp(uri->authority, ""))) {
       gpr_log(GPR_ERROR, "URI authority not supported");
@@ -159,26 +172,16 @@ class XdsResolverFactory : public ResolverFactory {
     return MakeOrphanable<XdsResolver>(std::move(args));
   }
 
-  const char* scheme() const override { return scheme_; }
-
- private:
-  const char* scheme_;
+  const char* scheme() const override { return "xds"; }
 };
 
-constexpr char kXdsScheme[] = "xds";
-constexpr char kXdsExperimentalScheme[] = "xds-experimental";
-
 }  // namespace
 
 }  // namespace grpc_core
 
 void grpc_resolver_xds_init() {
   grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
-      absl::make_unique<grpc_core::XdsResolverFactory>(grpc_core::kXdsScheme));
-  // TODO(roth): Remov this in the 1.31 release.
-  grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
-      absl::make_unique<grpc_core::XdsResolverFactory>(
-          grpc_core::kXdsExperimentalScheme));
+      absl::make_unique<grpc_core::XdsResolverFactory>());
 }
 
 void grpc_resolver_xds_shutdown() {}

+ 0 - 1
src/core/ext/filters/client_channel/resolver_result_parsing.h

@@ -33,7 +33,6 @@
 #include "src/core/lib/gprpp/ref_counted_ptr.h"
 #include "src/core/lib/iomgr/exec_ctx.h"  // for grpc_millis
 #include "src/core/lib/json/json.h"
-#include "src/core/lib/slice/slice_hash_table.h"
 
 namespace grpc_core {
 namespace internal {

+ 5 - 4
src/core/ext/filters/client_channel/resolving_lb_policy.cc

@@ -114,10 +114,11 @@ class ResolvingLoadBalancingPolicy::ResolvingControlHelper
     return parent_->channel_control_helper()->CreateSubchannel(args);
   }
 
-  void UpdateState(grpc_connectivity_state state,
+  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
                    std::unique_ptr<SubchannelPicker> picker) override {
     if (parent_->resolver_ == nullptr) return;  // Shutting down.
-    parent_->channel_control_helper()->UpdateState(state, std::move(picker));
+    parent_->channel_control_helper()->UpdateState(state, status,
+                                                   std::move(picker));
   }
 
   void RequestReresolution() override {
@@ -160,7 +161,7 @@ ResolvingLoadBalancingPolicy::ResolvingLoadBalancingPolicy(
   if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
     gpr_log(GPR_INFO, "resolving_lb=%p: starting name resolution", this);
   }
-  channel_control_helper()->UpdateState(GRPC_CHANNEL_CONNECTING,
+  channel_control_helper()->UpdateState(GRPC_CHANNEL_CONNECTING, absl::Status(),
                                         absl::make_unique<QueuePicker>(Ref()));
   resolver_->StartLocked();
 }
@@ -214,7 +215,7 @@ void ResolvingLoadBalancingPolicy::OnResolverError(grpc_error* error) {
         "Resolver transient failure", &error, 1);
     helper_->ResolverTransientFailure(GRPC_ERROR_REF(state_error));
     channel_control_helper()->UpdateState(
-        GRPC_CHANNEL_TRANSIENT_FAILURE,
+        GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(state_error),
         absl::make_unique<TransientFailurePicker>(state_error));
   }
   GRPC_ERROR_UNREF(error);

+ 44 - 22
src/core/ext/filters/client_channel/subchannel.cc

@@ -26,6 +26,8 @@
 #include <algorithm>
 #include <cstring>
 
+#include "absl/strings/str_format.h"
+
 #include <grpc/support/alloc.h>
 #include <grpc/support/string_util.h>
 
@@ -325,7 +327,8 @@ class Subchannel::ConnectedSubchannelStateWatcher
   }
 
  private:
-  void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
+  void OnConnectivityStateChange(grpc_connectivity_state new_state,
+                                 const absl::Status& status) override {
     Subchannel* c = subchannel_;
     MutexLock lock(&c->mu_);
     switch (new_state) {
@@ -343,7 +346,15 @@ class Subchannel::ConnectedSubchannelStateWatcher
           if (c->channelz_node() != nullptr) {
             c->channelz_node()->SetChildSocket(nullptr);
           }
-          c->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE);
+          // We need to construct our own status if the underlying state was
+          // shutdown since the accompanying status will be StatusCode::OK
+          // otherwise.
+          c->SetConnectivityStateLocked(
+              GRPC_CHANNEL_TRANSIENT_FAILURE,
+              new_state == GRPC_CHANNEL_SHUTDOWN
+                  ? absl::Status(absl::StatusCode::kUnavailable,
+                                 "Subchannel has disconnected.")
+                  : status);
           c->backoff_begun_ = false;
           c->backoff_.Reset();
         }
@@ -354,7 +365,7 @@ class Subchannel::ConnectedSubchannelStateWatcher
         // a callback for READY, because that was the state we started
         // this watch from.  And a connected subchannel should never go
         // from READY to CONNECTING or IDLE.
-        c->SetConnectivityStateLocked(new_state);
+        c->SetConnectivityStateLocked(new_state, status);
       }
     }
   }
@@ -368,14 +379,15 @@ class Subchannel::AsyncWatcherNotifierLocked {
  public:
   AsyncWatcherNotifierLocked(
       RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher,
-      Subchannel* subchannel, grpc_connectivity_state state)
+      Subchannel* subchannel, grpc_connectivity_state state,
+      const absl::Status& status)
       : watcher_(std::move(watcher)) {
     RefCountedPtr<ConnectedSubchannel> connected_subchannel;
     if (state == GRPC_CHANNEL_READY) {
       connected_subchannel = subchannel->connected_subchannel_;
     }
     watcher_->PushConnectivityStateChange(
-        {state, std::move(connected_subchannel)});
+        {state, status, std::move(connected_subchannel)});
     ExecCtx::Run(
         DEBUG_LOCATION,
         GRPC_CLOSURE_INIT(&closure_,
@@ -409,9 +421,10 @@ void Subchannel::ConnectivityStateWatcherList::RemoveWatcherLocked(
 }
 
 void Subchannel::ConnectivityStateWatcherList::NotifyLocked(
-    Subchannel* subchannel, grpc_connectivity_state state) {
+    Subchannel* subchannel, grpc_connectivity_state state,
+    const absl::Status& status) {
   for (const auto& p : watchers_) {
-    new AsyncWatcherNotifierLocked(p.second, subchannel, state);
+    new AsyncWatcherNotifierLocked(p.second, subchannel, state, status);
   }
 }
 
@@ -450,7 +463,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
       grpc_connectivity_state initial_state,
       RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher) {
     if (state_ != initial_state) {
-      new AsyncWatcherNotifierLocked(watcher, subchannel_, state_);
+      new AsyncWatcherNotifierLocked(watcher, subchannel_, state_, status_);
     }
     watcher_list_.AddWatcherLocked(std::move(watcher));
   }
@@ -462,7 +475,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
 
   bool HasWatchers() const { return !watcher_list_.empty(); }
 
-  void NotifyLocked(grpc_connectivity_state state) {
+  void NotifyLocked(grpc_connectivity_state state, const absl::Status& status) {
     if (state == GRPC_CHANNEL_READY) {
       // If we had not already notified for CONNECTING state, do so now.
       // (We may have missed this earlier, because if the transition
@@ -470,13 +483,15 @@ class Subchannel::HealthWatcherMap::HealthWatcher
       // subchannel may not have sent us a notification for CONNECTING.)
       if (state_ != GRPC_CHANNEL_CONNECTING) {
         state_ = GRPC_CHANNEL_CONNECTING;
-        watcher_list_.NotifyLocked(subchannel_, state_);
+        status_ = status;
+        watcher_list_.NotifyLocked(subchannel_, state_, status);
       }
       // If we've become connected, start health checking.
       StartHealthCheckingLocked();
     } else {
       state_ = state;
-      watcher_list_.NotifyLocked(subchannel_, state_);
+      status_ = status;
+      watcher_list_.NotifyLocked(subchannel_, state_, status);
       // We're not connected, so stop health checking.
       health_check_client_.reset();
     }
@@ -489,11 +504,13 @@ class Subchannel::HealthWatcherMap::HealthWatcher
   }
 
  private:
-  void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
+  void OnConnectivityStateChange(grpc_connectivity_state new_state,
+                                 const absl::Status& status) override {
     MutexLock lock(&subchannel_->mu_);
     if (new_state != GRPC_CHANNEL_SHUTDOWN && health_check_client_ != nullptr) {
       state_ = new_state;
-      watcher_list_.NotifyLocked(subchannel_, new_state);
+      status_ = status;
+      watcher_list_.NotifyLocked(subchannel_, new_state, status);
     }
   }
 
@@ -508,6 +525,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
   grpc_core::UniquePtr<char> health_check_service_name_;
   OrphanablePtr<HealthCheckClient> health_check_client_;
   grpc_connectivity_state state_;
+  absl::Status status_;
   ConnectivityStateWatcherList watcher_list_;
 };
 
@@ -547,9 +565,10 @@ void Subchannel::HealthWatcherMap::RemoveWatcherLocked(
   if (!it->second->HasWatchers()) map_.erase(it);
 }
 
-void Subchannel::HealthWatcherMap::NotifyLocked(grpc_connectivity_state state) {
+void Subchannel::HealthWatcherMap::NotifyLocked(grpc_connectivity_state state,
+                                                const absl::Status& status) {
   for (const auto& p : map_) {
-    p.second->NotifyLocked(state);
+    p.second->NotifyLocked(state, status);
   }
 }
 
@@ -826,7 +845,7 @@ void Subchannel::WatchConnectivityState(
   }
   if (health_check_service_name == nullptr) {
     if (state_ != initial_state) {
-      new AsyncWatcherNotifierLocked(watcher, this, state_);
+      new AsyncWatcherNotifierLocked(watcher, this, state_, status_);
     }
     watcher_list_.AddWatcherLocked(std::move(watcher));
   } else {
@@ -928,8 +947,10 @@ const char* SubchannelConnectivityStateChangeString(
 }  // namespace
 
 // Note: Must be called with a state that is different from the current state.
-void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state) {
+void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state,
+                                            const absl::Status& status) {
   state_ = state;
+  status_ = status;
   if (channelz_node_ != nullptr) {
     channelz_node_->UpdateConnectivityState(state);
     channelz_node_->AddTraceEvent(
@@ -938,9 +959,9 @@ void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state) {
             SubchannelConnectivityStateChangeString(state)));
   }
   // Notify non-health watchers.
-  watcher_list_.NotifyLocked(this, state);
+  watcher_list_.NotifyLocked(this, state, status);
   // Notify health watchers.
-  health_watcher_map_.NotifyLocked(state);
+  health_watcher_map_.NotifyLocked(state, status);
 }
 
 void Subchannel::MaybeStartConnectingLocked() {
@@ -1012,7 +1033,7 @@ void Subchannel::ContinueConnectingLocked() {
   next_attempt_deadline_ = backoff_.NextAttemptTime();
   args.deadline = std::max(next_attempt_deadline_, min_deadline);
   args.channel_args = args_;
-  SetConnectivityStateLocked(GRPC_CHANNEL_CONNECTING);
+  SetConnectivityStateLocked(GRPC_CHANNEL_CONNECTING, absl::Status());
   connector_->Connect(args, &connecting_result_, &on_connecting_finished_);
 }
 
@@ -1031,7 +1052,8 @@ void Subchannel::OnConnectingFinished(void* arg, grpc_error* error) {
       GRPC_SUBCHANNEL_WEAK_UNREF(c, "connecting");
     } else {
       gpr_log(GPR_INFO, "Connect failed: %s", grpc_error_string(error));
-      c->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE);
+      c->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
+                                    grpc_error_to_absl_status(error));
       GRPC_SUBCHANNEL_WEAK_UNREF(c, "connecting");
     }
   }
@@ -1091,7 +1113,7 @@ bool Subchannel::PublishTransportLocked() {
   connected_subchannel_->StartWatch(
       pollset_set_, MakeOrphanable<ConnectedSubchannelStateWatcher>(this));
   // Report initial state.
-  SetConnectivityStateLocked(GRPC_CHANNEL_READY);
+  SetConnectivityStateLocked(GRPC_CHANNEL_READY, absl::Status());
   return true;
 }
 

Some files were not shown because too many files changed in this diff