Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use WorkSerializer in XdsClient to propagate updates in a synchronized manner #27975

Merged
merged 11 commits into from
Nov 13, 2021

Conversation

yashykt
Copy link
Member

@yashykt yashykt commented Nov 9, 2021

XdsClient watcher notifications callbacks are currently invoked inline while still holding onto the XdsClient mutex. These callbacks often require to invoke an API on XdsClient. To do this in a way that avoids deadlocks, the callbacks schedule themselves on ExecCtx. The issue with this is that the callbacks can be pushed on ExecCtxs of different threads which can mess up the ordering of these notifications.

Using WorkSerializer::Schedule and WorkSerializer::DrainQueue, we always invoke the callbacks outside the XdsClient::mu_ so that the callbacks do not need to delay the callbacks. We additionally get the advantage of being able to execute code outside the critical region which should be a performance win (though it's probably not so critical).


This change is Reviewable

@yashykt yashykt added the release notes: no Indicates if PR should not be in release notes label Nov 9, 2021
@yashykt yashykt changed the title Use WorkSerializer in XdsClient to propagate updates Use WorkSerializer in XdsClient to propagate updates in a synchronized manner Nov 9, 2021
@yashykt yashykt marked this pull request as ready for review November 9, 2021 07:54
@yashykt yashykt added release notes: yes Indicates if PR needs to be in release notes and removed release notes: no Indicates if PR should not be in release notes labels Nov 9, 2021
@yashykt
Copy link
Member Author

yashykt commented Nov 9, 2021

Mark is OOO, so adding @donnadionne for review. I probably won't merge this till I get Mark's eyes on this but it'll be good to have an additional set of eyes.

Copy link
Member

@markdroth markdroth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good overall! Comments are mostly optimizations, particularly around not taking unnecessary refs or making unnecessary copies.

Please let me know if you have any questions. Thanks!

Reviewed 5 of 6 files at r1, 1 of 1 files at r2, all commit messages.
Reviewable status: all files reviewed, 15 unresolved discussions (waiting on @donnadionne and @yashykt)


src/core/ext/filters/client_channel/lb_policy/xds/cds.cc, line 75 at r2 (raw file):

    void OnClusterChanged(XdsApi::CdsUpdate cluster_data) override {
      RefCountedPtr<CdsLb> cds_lb = parent_;

This can be a const reference, since we don't need to take a new ref here. The new ref will happen with the copy for the lambda capture.

Actually, since the watcher itself is now ref-counted, we can avoid copying name_ if we take a ref to the watcher instead of taking a ref to the CDS LB policy:

Ref().release();  // Ref held by callback.
parent_->work_serializer()->Run(
    // TODO(roth): When we move to C++14, capture cluster_data with std::move().
    [this, cluster_data]() mutable {
      parent_->OnClusterChanged(name_, std::move(cluster_data));
      Unref();
    },
    DEBUG_LOCATION);

Same for all three callbacks.


src/core/ext/filters/client_channel/lb_policy/xds/cds.cc, line 78 at r2 (raw file):

      std::string name = name_;
      parent_->work_serializer()->Run(
          [cds_lb, name, cluster_data]() mutable {

Please add a TODO about capturing cluster_data via std::move() once we can use C++14.


src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc, line 148 at r2 (raw file):

    }

    // parent() and index() could have been protected methods but a bug in msvc

If possible, I'd prefer to keep these methods protected and use friend statements to work around this bug, like we were doing before. If MSVC doesn't understand the lambdas, then maybe we can move the code from the lambdas to private methods of EndpointWatcher. For example:

class EndpointWatcher : public XdsClient::EndpointWatcherInterface {
 public:
  void OnEndpointChanged(XdsApi::EdsUpdate update) override {
    Ref().release();  // Ref held by callback.
    discovery_mechanism_->parent()->work_serializer()->Run(
        [this, update]() mutable {
          OnEndpointChangedHelper(std::move(update));
          Unref();
        },
        DEBUG_LOCATION);
  }

 private:
  // Code accessing protected methods of `DiscoveryMechanism` need to be
  // in methods of this class rather than in lambdas to work around an MSVC bug.
  void OnEndpointChangedHelper(XdsApi::EdsUpdate update) {
    discovery_mechanism_->parent()->OnEndpointChanged(
        discovery_mechanism_->index(), std::move(update));
  }
};

src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc, line 181 at r2 (raw file):

      }
      void OnEndpointChanged(XdsApi::EdsUpdate update) override {
        RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism =

This can be a const reference, so that we don't take an unnecessary ref. We are already taking a ref in the lambda capture.

Same thing for all three callbacks.

(This becomes irrelevant if you take my suggestion above about taking a new ref to the watcher instead of taking a ref to the discovery mechanism to avoid the MSVC bug.)


src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc, line 184 at r2 (raw file):

            discovery_mechanism_;
        discovery_mechanism->parent()->work_serializer()->Run(
            [discovery_mechanism, update]() mutable {

Please add a TODO about capturing update via std::move() once we can use C++14.


src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc, line 899 at r2 (raw file):

void XdsResolver::NotifyLdsUpdate(XdsApi::LdsUpdate update,
                                  const DebugLocation& location) {
  RefCountedPtr<XdsResolver> resolver = Ref();

This is taking two refs, one here and another in the lambda capture, but we only need one.

I think it makes sense to keep this code in the watcher implementations rather than moving it into these helper functions, because then we can avoid the extra ref by taking the same approach as elsewhere (i.e., take a ref to the watcher), or we can declare a const reference to the existing RefCountedPtr<XdsResolver> data member.

Same thing for all three callbacks.


src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc, line 901 at r2 (raw file):

  RefCountedPtr<XdsResolver> resolver = Ref();
  work_serializer_->Run(
      [resolver, update]() mutable {

Please add a TODO about using std::move() to capture update when we move to C++14.

Same for the RDS update.


src/core/ext/xds/xds_client.h, line 49 at r2 (raw file):

  class ListenerWatcherInterface : public RefCounted<ListenerWatcherInterface> {
   public:
    // TODO(review_note): Tried adding ABSL_EXCLUSIVE_LOCKS_REQUIRED but that

What was the error you got when trying this?

Note that when using lock annotations with a WorkSerializer, you need to add ABSL_EXCLUSIVE_LOCKS_REQUIRED() annotations to the lambdas that you run in the WorkSerializer. You can see how we did this in the client channel code in #25983.


src/core/ext/xds/xds_client.cc, line 183 at r2 (raw file):

  class ResourceState : public InternallyRefCounted<ResourceState> {
   public:
    // TODO(): Check if passing XdsClient as a raw ptr is safe

I don't think we need to pass this in at all. Instead, you can change OnTimer() to access it via self->ads_calld_->xds_client().


src/core/ext/xds/xds_client.cc, line 226 at r2 (raw file):

        self->OnTimerLocked(GRPC_ERROR_REF(error));
      }
      // TODO(): Can we avoid draining the queue on a timer thread?

I think this is fine. We were already doing this work in the timer thread before this change.


src/core/ext/xds/xds_client.cc, line 2162 at r2 (raw file):

        "Unable to parse resource name for listener %s", listener_name));
    work_serializer_.Run(
        [watcher, error]() {

Please add a TODO that once we can use C++14, we can capture watcher using std::move().

Same thing for all resource types.


src/core/ext/xds/xds_client.cc, line 2163 at r2 (raw file):

    work_serializer_.Run(
        [watcher, error]() {
          // review_note: this should fix a leak

Good catch!

Please remove these review_note: comments before merging.


src/core/ext/xds/xds_client.cc, line 2184 at r2 (raw file):

      auto& value = listener_state.update.value();
      work_serializer_.Schedule(
          [watcher, value]() { watcher->OnListenerChanged(value); },

Same C++14 TODO here.

Same thing for all resource types.


src/core/ext/xds/xds_client.cc, line 2589 at r2 (raw file):

  // being captured by value
  work_serializer_.Schedule(
      [authority_state_map, error]() ABSL_NO_THREAD_SAFETY_ANALYSIS {

I don't think we want to capture the whole authority_state_map here, since that includes a lot of data we don't actually need. It will take an unnecessary ref to the ChannelState object, and it will unnecessarily copy all of the cached resource data.

Instead, I suggest something like this:

std::set<RefCountedPtr<ListenerWatcher>> listener_watchers;
std::set<RefCountedPtr<RouteConfigWatcher>> route_config_watchers;
std::set<RefCountedPtr<ClusterWatcher>> cluster_watchers;
std::set<RefCountedPtr<EndpointWatcher>> endpoint_watchers;
for (const auto& a : authority_state_map_) {
  for (const auto& p : a.second.listener_map) {
    const ListenerState& listener_state = p.second;
    for (const auto& q : listener_state.watchers) {
      listener_watchers.insert(q.second);
    }
  }
  // ...same for other resource types...
}
work_serializer_.Schedule(
    [listener_watchers, route_config_watchers, cluster_watchers, endpoint_watchers, error]()
        ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
      for (const auto& watcher : listener_watchers) {
        watcher->OnError(GRPC_ERROR_REF(error);
      }
      // ...same for other resource types...
      GRPC_ERROR_UNREF(error);
    },
    DEBUG_LOCATION);

src/core/ext/xds/xds_client.cc, line 2589 at r2 (raw file):

  // being captured by value
  work_serializer_.Schedule(
      [authority_state_map, error]() ABSL_NO_THREAD_SAFETY_ANALYSIS {

This should use ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) instead of ABSL_NO_THREAD_SAFETY_ANALYSIS.

Copy link
Member Author

@yashykt yashykt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: 1 of 6 files reviewed, 15 unresolved discussions (waiting on @donnadionne and @markdroth)


src/core/ext/filters/client_channel/lb_policy/xds/cds.cc, line 75 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

This can be a const reference, since we don't need to take a new ref here. The new ref will happen with the copy for the lambda capture.

Actually, since the watcher itself is now ref-counted, we can avoid copying name_ if we take a ref to the watcher instead of taking a ref to the CDS LB policy:

Ref().release();  // Ref held by callback.
parent_->work_serializer()->Run(
    // TODO(roth): When we move to C++14, capture cluster_data with std::move().
    [this, cluster_data]() mutable {
      parent_->OnClusterChanged(name_, std::move(cluster_data));
      Unref();
    },
    DEBUG_LOCATION);

Same for all three callbacks.

Done.


src/core/ext/filters/client_channel/lb_policy/xds/cds.cc, line 78 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

Please add a TODO about capturing cluster_data via std::move() once we can use C++14.

Done.


src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc, line 148 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

If possible, I'd prefer to keep these methods protected and use friend statements to work around this bug, like we were doing before. If MSVC doesn't understand the lambdas, then maybe we can move the code from the lambdas to private methods of EndpointWatcher. For example:

class EndpointWatcher : public XdsClient::EndpointWatcherInterface {
 public:
  void OnEndpointChanged(XdsApi::EdsUpdate update) override {
    Ref().release();  // Ref held by callback.
    discovery_mechanism_->parent()->work_serializer()->Run(
        [this, update]() mutable {
          OnEndpointChangedHelper(std::move(update));
          Unref();
        },
        DEBUG_LOCATION);
  }

 private:
  // Code accessing protected methods of `DiscoveryMechanism` need to be
  // in methods of this class rather than in lambdas to work around an MSVC bug.
  void OnEndpointChangedHelper(XdsApi::EdsUpdate update) {
    discovery_mechanism_->parent()->OnEndpointChanged(
        discovery_mechanism_->index(), std::move(update));
  }
};

Done.


src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc, line 181 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

This can be a const reference, so that we don't take an unnecessary ref. We are already taking a ref in the lambda capture.

Same thing for all three callbacks.

(This becomes irrelevant if you take my suggestion above about taking a new ref to the watcher instead of taking a ref to the discovery mechanism to avoid the MSVC bug.)

Done.


src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc, line 184 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

Please add a TODO about capturing update via std::move() once we can use C++14.

Done.


src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc, line 899 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

This is taking two refs, one here and another in the lambda capture, but we only need one.

I think it makes sense to keep this code in the watcher implementations rather than moving it into these helper functions, because then we can avoid the extra ref by taking the same approach as elsewhere (i.e., take a ref to the watcher), or we can declare a const reference to the existing RefCountedPtr<XdsResolver> data member.

Same thing for all three callbacks.

Done.


src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc, line 901 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

Please add a TODO about using std::move() to capture update when we move to C++14.

Same for the RDS update.

Done.


src/core/ext/xds/xds_client.h, line 49 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

What was the error you got when trying this?

Note that when using lock annotations with a WorkSerializer, you need to add ABSL_EXCLUSIVE_LOCKS_REQUIRED() annotations to the lambdas that you run in the WorkSerializer. You can see how we did this in the client channel code in #25983.

Adding in what I tried.


src/core/ext/xds/xds_client.cc, line 183 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

I don't think we need to pass this in at all. Instead, you can change OnTimer() to access it via self->ads_calld_->xds_client().

Ah, you are right. Thanks!


src/core/ext/xds/xds_client.cc, line 226 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

I think this is fine. We were already doing this work in the timer thread before this change.

Ack.


src/core/ext/xds/xds_client.cc, line 2162 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

Please add a TODO that once we can use C++14, we can capture watcher using std::move().

Same thing for all resource types.

Done.


src/core/ext/xds/xds_client.cc, line 2163 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

Good catch!

Please remove these review_note: comments before merging.

Ack


src/core/ext/xds/xds_client.cc, line 2184 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

Same C++14 TODO here.

Same thing for all resource types.

Done.


src/core/ext/xds/xds_client.cc, line 2589 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

I don't think we want to capture the whole authority_state_map here, since that includes a lot of data we don't actually need. It will take an unnecessary ref to the ChannelState object, and it will unnecessarily copy all of the cached resource data.

Instead, I suggest something like this:

std::set<RefCountedPtr<ListenerWatcher>> listener_watchers;
std::set<RefCountedPtr<RouteConfigWatcher>> route_config_watchers;
std::set<RefCountedPtr<ClusterWatcher>> cluster_watchers;
std::set<RefCountedPtr<EndpointWatcher>> endpoint_watchers;
for (const auto& a : authority_state_map_) {
  for (const auto& p : a.second.listener_map) {
    const ListenerState& listener_state = p.second;
    for (const auto& q : listener_state.watchers) {
      listener_watchers.insert(q.second);
    }
  }
  // ...same for other resource types...
}
work_serializer_.Schedule(
    [listener_watchers, route_config_watchers, cluster_watchers, endpoint_watchers, error]()
        ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
      for (const auto& watcher : listener_watchers) {
        watcher->OnError(GRPC_ERROR_REF(error);
      }
      // ...same for other resource types...
      GRPC_ERROR_UNREF(error);
    },
    DEBUG_LOCATION);

Done.


src/core/ext/xds/xds_client.cc, line 2589 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

This should use ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) instead of ABSL_NO_THREAD_SAFETY_ANALYSIS.

Tried but doesn't seem to be working

Copy link
Member Author

@yashykt yashykt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: 1 of 6 files reviewed, 15 unresolved discussions (waiting on @donnadionne and @markdroth)


src/core/ext/xds/xds_client.h, line 49 at r2 (raw file):

Previously, yashykt (Yash Tibrewal) wrote…

Adding in what I tried.

got it to work :)


src/core/ext/xds/xds_client.cc, line 2589 at r2 (raw file):

Previously, yashykt (Yash Tibrewal) wrote…

Tried but doesn't seem to be working

got it to work :)

Copy link
Member

@markdroth markdroth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great! Feel free to merge after addressing the remaining couple of minor comments.

Reviewed 2 of 5 files at r3, 1 of 2 files at r4, 2 of 2 files at r5, all commit messages.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @donnadionne and @yashykt)


src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc, line 91 at r5 (raw file):

          // std::move
          [this, listener]() mutable {
            if (resolver_->xds_client_ != nullptr) {

We can probably move the check for xds_client_ being null into XdsResolver::OnListenerUpdate(), XdsResolver::OnRouteConfigUpdate(), XdsResolver::OnError(), and XdsResolver::OnResourceDoesNotExist(), so that they don't need to be duplicated in all of the lambdas.


src/core/ext/xds/xds_client.cc, line 2625 at r5 (raw file):

  }
  work_serializer_.Schedule(
      [listener_watchers, route_config_watchers, cluster_watchers,

Please add the same TODO here about capturing with std::move() when we can use C++14.

@yashykt yashykt enabled auto-merge (squash) November 11, 2021 22:37
@yashykt yashykt closed this Nov 11, 2021
@yashykt yashykt reopened this Nov 11, 2021
@yashykt
Copy link
Member Author

yashykt commented Nov 11, 2021

/easycla

@yashykt
Copy link
Member Author

yashykt commented Nov 11, 2021

@caniszczyk Can you help with getting the EasyCLA check to get unstuck?

@yashykt yashykt enabled auto-merge (squash) November 11, 2021 23:19
@dealako
Copy link

dealako commented Nov 12, 2021

Odd, EasyCLA logs show the PR successfully passed the check and we posted an update back to GitHub:

cla: EasyCLA App checks pass for PR: 27975 with authors: [('f5fabdbc7a7e216150a035330e352dcdd4c1e596', 'Yash Tibrewal'), ('0cfdad83b6d54add6177ed239a03abb1e9df9c67', 'Yash Tibrewal'), ('7ce03fae7dbe1cc137656b5ae4ae69d2d630bd77', 'Yash Tibrewal'), ('0c5f6f9afe6a70af6cd31dd1314e714253cc57d8', 'Yash Tibrewal'), ('abed7a0cb12f55365bbfeb000fe394c4bbf851df', 'Yash Tibrewal'), ('3b817204609c65310de98fdebdc0f7d539717aec', 'Yash Tibrewal'), ('03edbdd4c9f75fe15645b44454059f0f356b7d28', 'Yash Tibrewal'), ('00090182dd5cdcb6055d6fd5224afa9b23946363', 'Yash Tibrewal'), ('df04a85776e7d80c7017643215de1d41294156a7', 'Yash Tibrewal'), ('2a0ed4e20d2eb1a33e818869ecd786c4ab1e41f2', 'Yash Tibrewal'), ('ff0d8f884372a8541d045bc9de14cb135ee6180b', 'Yash Tibrewal')]
cla: Successfully posted status success on PR 27975: Commit f5fabdb

@dealako
Copy link

dealako commented Nov 12, 2021

/easycla

@dealako
Copy link

dealako commented Nov 12, 2021

Somehow the EasyCLA bot is unable to update the status. May need to close and re-open this ticket to re-trigger all the status checks.

@yashykt yashykt closed this Nov 12, 2021
auto-merge was automatically disabled November 12, 2021 05:26

Pull request was closed

@yashykt yashykt reopened this Nov 12, 2021
@dealako
Copy link

dealako commented Nov 12, 2021

We're pushing an update to EasyCLA which resolves this issue. Sorry for the inconvenience! The issue was related to EasyCLA calculating/determining the latest (most recent) git commit SHA when more than 1 commit is associated with a given PR. When updating the status, we need to provide the latest git commit SHA as input - not the other SHAs. This should be resolved now with our latest update. Once we have this fix deployed, I'll add the '/easycla' commit to trigger a re-check - which should pass.

Again, sorry for the inconvenience.

@dealako
Copy link

dealako commented Nov 12, 2021

/easycla

@yashykt
Copy link
Member Author

yashykt commented Nov 13, 2021

Issues: #28025, #26886

@yashykt
Copy link
Member Author

yashykt commented Nov 13, 2021

Thanks @dealako !

@yashykt yashykt merged commit 6b34d96 into grpc:master Nov 13, 2021
@copybara-service copybara-service bot added the imported Specifies if the PR has been imported to the internal repository label Nov 15, 2021
krestofur added a commit to krestofur/grpc that referenced this pull request Nov 24, 2021
* Revert low Java throughput hotfix; implement permanent fix (grpc#27919)

* xds/interop: Completely disable principal-present authz test (grpc#27933)

A broken fix for the server-side bug is producing invalid configuration,
causing the server to reject all the configuration. Disable the
configuration and tests until fix is fixed.

* Add EventEngine::CancelConnect (grpc#27764)

* Fix crash in bloat diff if diff_size != 0 (grpc#27935)

* Update bloat_diff.py

* Automated change: Fix sanity tests (grpc#27936)

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* ugh (grpc#27937)

* [BinderTransport] Avoid depending on NdkBinder at compile time (grpc#27912)

* [BinderTransport] Avoid depending on NdkBinder at compile time

We would like to make it possible to use BinderTransport in a APK that
has min sdk version lower than 29 (NdkBinder was introduced at 29)

We copies constants and type definitions from Ndk headers, creates a
same name wrapper for every NdkBinder API we use in
grpc_binder::ndk_util namespace.

We will try to load libbinder_ndk.so and resolve the symbol when the
NdkBinder API wrappers are invoked.

* regenerate projects

* Add GRPC_NO_BINDER guard

* Appnet schema changes (grpc#27874)

* Add back references and scope field

* Set scope in router

* Reverse order of cleanup

* Add router_scope flag

* Use router_scope flag to create Router

* I apparently don't know how to brain

* Yapf

* Yeah, that can't be the default

* Remove debug print

* Remove impossible todos

* And another

* Switch from router-scope to config-scope

* Implement schema changes

* Use backend service URL

* Use CLH reference format to backend service

* I am an idiot

* *internal screaming*

* Try project number

* Why is this all awful

* Go back to trying project name

* Try cleaning things up

* Agh

* Address review comments

* Remove superfluous Optional type

* Tweak bloat thresholds (grpc#27942)

* Add Schedule and DrainQueue to WorkSerializer (grpc#27902)

* Add Schedule and DrainQueue to WorkSerializer

* Fix comments

* Reviewer comments

* Use acq_rel semantics instead of seq_cst

* Reviewer comments

* s/dummy/no-op

* Reviewer comments

* Fix

* Reviewer comments

* Reviewer comments

* xds_end2end_test: Only start backends when needed (grpc#27911)

* xds_end2end_test: Fix flakiness on WaitForLdsNack

* xds_end2end_test: Only start the server when we want

* Revert WaitForNack changes

* Fixes

* Fix CsdsShortAdsTimeoutTest

* Fix sanity

* Revert grpc#27780 (grpc#27944)

* bump version on master to 1.43-dev (grpc#27930)

* bump version on master to 1.43-dev

* bump core version

* update g_stands_for.md

* Add support for abstract unix domain sockets (grpc#27906)

* Add failing end2end test for inconsistent percent-decoding of URIs

* Add passing h2_local_abstract_uds end2end tests

* null-safe string_view

* mac doesn't UDS

* mac doesn't do *abstract* UDS

* Add an experimental binder transport API for pre-finding Java class (grpc#27939)

Due to limitation of JVM, when user want to create binder channel in
threads created in unmanaged native code, they will need to call this
new API first to make sure Java helper classes can correctly be found.

Unused code in jni_utils.cc are also cleaned up in this commit

* Add grpc-java 1.42.0 to client_matrix.py (grpc#27949)

* Early exit BackUp() on count == 0 (grpc#27946)

* First pass IWYU tooling (grpc#27857)

* First pass IWYU tooling

* fix

* Automated change: Fix sanity tests

* Update iwyu.sh

* Update iwyu.sh

* Update Dockerfile.template

* Update iwyu.sh

* Automated change: Fix sanity tests

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* OpenCensus: Move metadata storage to arena (grpc#27948)

* fix LB policy call status notification interface, and other improvements (grpc#27947)

* fix LB policy call status notification interface, and other improvements

* fix build

* address review comments

* Use PUT not POST to avoid duplicate bloat labels (grpc#27952)

* tcp_client_custom: fix socket leak (grpc#27408)

* Delete happy-pancakes.yml (grpc#27955)

I'm not going to get a chance to finish this for a while, so delete for now.

* Address reviewer comments on grpc#27906 (grpc#27954)

* Address reviewer comments on grpc#27906

* fixes

* absl::ConsumePrefix FTW!

* Assert Android API >= v21 (grpc#27943)

* Assert Android API >= v21

This precedes a change that would otherwise break on older Android APIs,
but in a more obvious way.

* error if __ANDROID_API__ is not defined

* update all Andriod minSdkVersions to 21

* csharp experimental: android-19 to 21

* Api fuzzer extensions to support simulating traffic congestion (grpc#27820)

* adding api_fuzzer changes

* adding api fuzzer changes

* updating some typos

* updating api_fuzzer and corpus entries

* updating api_fuzzer to fix crash due to two successive receive_op batches

* adding some reverted fixes to api_fuzzer.cc

* updating api_fuzzer and corpus as per initial comments

* fix some typos

* fix memory leaks and timeout issues

* adding some comments and removing debug strings

* updating api_fuzzer to remove previous edits to always add recv initial metadata ops for client calls

* updating passthru endpoint to account for erroneous initialization when channel effects are not simulated

* tidying up code

* Migrate Infrastructure Scripts to Python 3 (grpc#27135)

* Run 2to3 on tools directory

* Delete github_stats_tracking

* Re-run 2to3

* Remove unused script

* Remove unused script

* Remove unused line count utility

* Yapf. Isort

* Remove accidentally included file

* Migrate tools/distrib directory to python 3

* Remove unnecessary shebang

* Restore line_count directory

* Immediately convert subprocess.check_output output to string

* Take care of Python 2 shebangs

* Invoke scripts using a Python 3 interpreter

* Yapf. Isort

* Try installing Python 3 first

* See if we have any Python 3 versions installed

* Add Python 3.7 to Windows path

* Try adding a symlink

* Try to symlink differently

* Install six for Python 3

* Run run_interop_tests with python 3

* Try installing six in python3.7 explicitly

* Revert "Try installing six in python3.7 explicitly"

This reverts commit 2cf60d7.

* And debug some more

* Fix issue with jobset.py

* Add debug for CI failure

* Revert microbenchmark changes

* Fix RBE upload (grpc#27969)

* Fix relative imports for Python 3 (grpc#27971)

* Fix relative imports for Python 3

* Remove space

* isort

* Revert "Api fuzzer extensions to support simulating traffic congestion (grpc#27820)" (grpc#27973)

This reverts commit c1089d2.

* Repo manager to Donna (grpc#27967)

* Remove `from . import` from benchmarking scripts. (grpc#27977)

* Remove non-loadbearing argument (grpc#27968)

* Reintroduce the EventEngine default factory (grpc#27920)

* Reintroduce the EventEngine default factory

An application can provide an EventEngine factory function that allows
gRPC internals to create EventEngines as needed. This factory would be
used when no EventEngine is provided for some given channel or server,
and where an EventEngine otherwise could not be provided by the
application. Note that there currently is no API to provide an
EventEngine per channel or per server.

I've also deleted some previous iterations on global EventEngine and
EventEngine factory ideas. This new code lives in a public API, and
coexists with iomgr instead of being isolated to an EventEngine-specific
iomgr implementation.

* add proper namespaces, and fix description

* put factory functions in their own file (for replaceability)

* add synchronization

* generate_projects.sh

* extract event_engine_base and event_engine_factory targets

Also separate iomgr/event_engine files in the BUILD, with comments

* gpr_platform

* move all EE factory declarations to event_engine_base

Makes internal hackery easier.

* add missing deps

* reorder dep alphabetically

* comment style change

* Fix rbe_upload SSL issue (grpc#27982)

* Attempt to fix rbe_upload SSL issue

* Fix comparison

* Rename the source files for ChannelArgsEndpointConfig (grpc#27972)

* Rename the source files for ChannelArgsEndpointConfig

Previous naming was non-descript

* generate_projects

* add missing file to BUILD, and generate_projects.sh

* correct include guards

* xds/interop: Delay to drain queued RPCs in authz test (grpc#27991)

The authz test flaked as no RPCs of the expected type had completed
within the sampling window. Server logs showed authz logs completing
batch of 276 RPCs back-to-back, without the expected 40 ms separation
(qps=25). It took a bit over 1 second to process through the backlog.
With the sample duration of 500 ms and there being a polling delay
between when the channel is READY and when the test driver polls
channelz, it makes sense that we can get lucky much of the time.

Obviously, adding a sleep isn't great either, but measuring the queue
length indirectly is more complex than really appropriate here. The real
solution is to stop using this continuous-qps test client.

```
Traceback (most recent call last):
  File "/tmp/work/grpc/tools/run_tests/xds_k8s_test_driver/tests/authz_test.py", line 252, in test_tls_allow
    grpc.StatusCode.OK)
  File "/tmp/work/grpc/tools/run_tests/xds_k8s_test_driver/tests/authz_test.py", line 183, in configure_and_assert
    method=rpc_type)
  File "/tmp/work/grpc/tools/run_tests/xds_k8s_test_driver/framework/xds_k8s_testcase.py", line 284, in assertRpcStatusCodes
    self.assertGreater(stats.result[status_code.value[0]], 0)
AssertionError: 0 not greater than 0
```

* Support Custom Post-handshake Verification in TlsCredentials (grpc#25631)

* custom verification refactoring - post-handshake verification

* Fix the packaging.version issue on newer Python (grpc#27999)

* Add PSM security to the list of xDS features in the grpc_xds_features.md file (grpc#28001)

* Fix python 3 encoding issues in release notes script (grpc#28002)

* Correct the wait time for url-map propagation (grpc#28004)

* Remove trickle benchmarks (grpc#28000)

* Remove trickle benchmarks

* Automated change: Fix sanity tests

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* [BinderTransport] Lower some log level from ERROR to INFO (grpc#27988)

We also plan to introduce a new tracer for tracing binder wireformat
logic.

* New resource quota integration (grpc#27643)

* new resource quota integration

* Automated change: Fix sanity tests

* fix

* fix

* fixes

* fixes

* fixes

* Automated change: Fix sanity tests

* fixes

* fixes

* Automated change: Fix sanity tests

* fixes

* fix

* fixes

* windows-fix

* fixes

* fixes

* fix

* fix-asan

* banned

* banned

* fixes

* clang-tidy-fix

* Automated change: Fix sanity tests

* fix-cronet

* review feedback

* review feedback

* Automated change: Fix sanity tests

* fixes

* bug fix

* fixes

* compile fix

* exclude megabyte size payloads from 1byte tests

* windows fix

* start moving ios

* keep moving windows

* Get windows compilation working.

* Automated change: Fix sanity tests

* better

* fixes

* remove slice buffer from memory_allocator.h

* Revert "remove slice buffer from memory_allocator.h"

This reverts commit 234a63b.

* ugh

* #fixtests

* pthread tls fixes

* Automated change: Fix sanity tests

* fixfixfix

* xxx

* add reset

* review feedback

* fix

* fix

* fixes

* fix

* mac progress

* cpp-impl-of

* rename ptr

* Automated change: Fix sanity tests

* memory-owner-is-a-memory-allocator

* fixes

* fix

* fix from prod

* fix

* Fix issue leading to bad pointers being returned on Windows.

* Automated change: Fix sanity tests

* fix multislice bug

* argh

* hyrums law fixes

* hyrums law fixes

* clang-format

* hyrums law fixes

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* Start port server separately (grpc#28005)

* Label microbenchmark differences similarly to bloat (grpc#27998)

* benchmark differences as a label

* debug

* Automated change: Fix sanity tests

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* fix AWS arm64 C++ build (grpc#27981)

* [Aio] Validate the input type for set_trailing_metadata and abort (grpc#27958)

* [Aio] Validate the input type for set_trailing_metadata and abort

* Correct the checking of sequence type

* Add feature examples with continuous integration (grpc#27917)

* Add failing end2end test for inconsistent percent-decoding of URIs

* Add passing h2_local_abstract_uds end2end tests

* Add basic abstract UDS example

* add test runner

* add proper bazel build path

* first attempt at CI configuration

* cleanup

* rename CI files for better readability

* Revert "New resource quota integration (grpc#27643)" (grpc#28014)

This reverts commit 39f0877.

* Allow API fuzzer to send multiple slices (grpc#27993)

* Allow API fuzzer to send multiple slices

* fixes

* Use strict buildifier in sanitize (grpc#28018)

Ensure that we use tools consistently everywhere!

* Fix typo (grpc#28019)

* Set BinderTransport connectivity state tracker initial state to READY (grpc#27979)

By default the state is set to IDLE, which is not desired because

1. The actual connectivity state when transport is created is READY
2. The binder tansport channel won't be able to recover from IDLE state
for some reason and cause the channel to stuck when used on multiple
thread. We have an internal bug tracking this issue.

* [BinderTransport] Add more info to class not found error msg (grpc#28009)

* Add note about starting port server out of band (grpc#28012)

* Increase the timeout of xds_k8s test to 180 (grpc#28027)

* Bloat reporting improvements (grpc#28013)

* Bloat reporting improvements

* typo

* fix

* fix

* fix

* XdsClient: fix resource timeout behavior (grpc#27860)

* XdsClient: fix resource timeout behavior

* fix clang-tidy

* more clang-tidy fixes

* yet more clang-tidy

* Fix name of feature example tests CI config file (grpc#28028)

* AVL implementation in C++ (grpc#27782)

* avl

* move-code,add-fuzzer

* done

* fix

* Automated change: Fix sanity tests

* buildifier

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* Revert "XdsClient: fix resource timeout behavior (grpc#27860)" (grpc#28032)

This reverts commit 7fdb40d.

* Use WorkSerializer in XdsClient to propagate updates in a synchronized manner (grpc#27975)

* Use WorkSerializer in XdsClient to propagate updates

* Fix breakage

* Add missing Drain

* More fixes

* Get around msvc issue

* Fix asan leak

* Reviewer comments

* Get around TSAN annotations

* Remove notes

* Clang-format

* Reviewer comments

* [BinderTransport] Send correct version to server and verify it (grpc#27990)

We support wireformat version 1.

* [BinderTransport] Print error message when API level is too low (grpc#27989)

Also removes an obsolete API

* Reland resource quota work (grpc#28017)

* Check if memory owner available prior to polling it

The transport may drop the memory owner during its destruction sequence

* tcp_fix

* Revert "Revert "New resource quota integration (grpc#27643)" (grpc#28014)"

This reverts commit 0ea2c37.

* clang-format

* fix-path

* fix

* Remove extra ';' after member function definition (grpc#28038)

Some user of gRPC library have [-Werror,-Wextra-semi] set and this extra
';' makes the code uncompilable

* fix missing header (grpc#28087)

* Revert "[BinderTransport] Send correct version to server and verify it (grpc#27990)" (grpc#28090)

This reverts commit 92c34b8.

* Exclude debug sections from bloat severity calculations (grpc#28089)

* Ensure JSON parser can consume dumped JSON (grpc#27994)

* Ensure JSON parser can consume dumped JSON

* fixes

* fixes

* Update fuzzer.cc

* internal_ci: rename grpc_xds_k8s to psm-security as part of tech-debt cleanup and name clarity (grpc#28034)

* Upgrade upb to 0e0de7d9 (grpc#27984)

* Remove upb first

* Squashed 'third_party/upb/' content from commit 0e0de7d9f9

git-subtree-dir: third_party/upb
git-subtree-split: 0e0de7d9f927aa888d9a0baeaf6576bbbb23bf0b

* Update bazel deps

* Regen upb files

* Fix build

* Second attempt: XdsClient: fix resource timeout behavior (grpc#28088)

* Revert "Revert "XdsClient: fix resource timeout behavior (grpc#27860)" (grpc#28032)"

This reverts commit 817eed0.

* use the right status code enum

* Tooling to remove redundant grpc_core:: namespace references (grpc#28030)

* Tooling to remove redundant grpc_core:: namespaces

These references tend to show up in our C++ code after C modules get
converted. Many get caught in review, many get missed.

* use it

* clang-format

* add gcr image for java release v1.42.1 (grpc#28094)

* add gcr image for java release v1.42.1

* replace java release v1.42.0 with v1.42.1

* Fix typo in bloat script (grpc#28104)

* setup-ios-bazel-test-to-run-c-core-ee-ut (grpc#28029)

* user-agent metadata trait, also: grpc_core::Slice is born (grpc#27770)

* new slice api

* storage-classes

* Automated change: Fix sanity tests

* tweaks

* refinement

* refinement

* compiles

* Automated change: Fix sanity tests

* better impl

* convert to gtest

* clean

* fixes

* tests

* Automated change: Fix sanity tests

* more-tests

* clarity

* comments

* comments

* fixes

* comment-updates

* fixes

* spam

* Automated change: Fix sanity tests

* move transport size into transport!

* mebbefix

* fix type

* x

* fix-merge

* review feedback

* review feedback

* Automated change: Fix sanity tests

* meh

* review feedback

* fix

* resolve compile issue

* Remove slice_refcount dependency on RefCounted

* update init for channel_data in http_client_filter

* Automated change: Fix sanity tests

* remove banned function

* fixes

* will it blend

* will it blend

* fix refcount init

* fix

* fix comment

* Fix typo in bloat script

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* Revert "user-agent metadata trait, also: grpc_core::Slice is born (grpc#27770)" (grpc#28108)

This reverts commit 7a40f50.

* Faster clang-format (grpc#28086)

* use parallelism to speed clang-format performance

* use parallelism to speed clang-format performance

* xDS: strip "type.googleapis.com/" prefix off of resource type constants (grpc#28024)

* Increase iOS test timeout from 1.5h to 2.0h (grpc#28110)

* Sync Protos with grpc-proto repo (grpc#27957)

* Sync with grpc_proto

* UPB gen

* Update csharp SDK to LTS versions (grpc#27966)

* update C# SDK

* regenerate dockerfiles

* install .NET6 and .NET Core 3.1

* regenerate dockerfiles

* change netcoreapp2.1 targets to netcoreapp3.1

* update installed SDKs in aarch64 C# job

* update run_tests scripts to use netcoreapp3.1 for C#

* use CppImplOf for grpc_server (grpc#28112)

* use CppImplOf for grpc_server

* fix build

* fix sanity

* enable clang-tidy readability-static-definition-in-anonymous-namespace check (grpc#28033)

* Passing repo manager to markdroth (grpc#28114)

* Passing repo manager to markdroth

* one more file

* Add Java v1.40.2 and v1.41.1 to the interop test client matrix. (grpc#27953)

* Adding prefix to authority map key (grpc#28106)

* Adding prefex to authority map key

* fixing according to code review suggestions

* fixing

* Guard against duplicate ops in the same batch (grpc#28118)

* Guard against duplicate ops in the same batch

* add test

* add fuzzer example

* better name

* Fix api_fuzzer found bug (grpc#28113)

* Don't limit bloaty output lines (grpc#28120)

* dont limit bloaty output lines

* Automated change: Fix sanity tests

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* Reland user-agent metadata work (grpc#28109)

* Revert "Revert "user-agent metadata trait, also: grpc_core::Slice is born (grpc#27770)" (grpc#28108)"

This reverts commit 89d08da.

* will it blend

* will it blend

* will it blend

* lcnagfmt

* sanity

* will it blend

* sleep @ end

* will it blend

* Revert "sleep @ end"

This reverts commit d6bca8e.

* review feedback

* review feedback

* Remove BUILD.gn (again) (grpc#28121)

* Revert "Revert "Api fuzzer extensions to support simulating traffic congestion (grpc#27820)" (grpc#27973)" (grpc#27974)

* Revert "Revert "Api fuzzer extensions to support simulating traffic congestion (grpc#27820)" (grpc#27973)"

This reverts commit 879f97e.

* updating passthru_endpoint file to fix windows breakages

* Automated change: Fix sanity tests

Co-authored-by: Vignesh2208 <Vignesh2208@users.noreply.github.com>

* Add v1.42.0 release of grpc-go to interop matrix (grpc#27985)

* remove RDS and EDS resource deletion inside of XdsClient (grpc#28128)

* Reduce OSS benchmarks polling time to 5s. (grpc#28131)

This change reduces total run time from ~86min to ~74min.

* Add missing exec ctx to public api (grpc#28134)

* Revert "use CppImplOf for grpc_server (grpc#28112)" (grpc#28130)

This reverts commit 2ea8e50.

* Fix xds_end2end_test dyld (grpc#28133)

* Support RDS updates on the server (grpc#27851)

* Port changes from grpc#27388

* Reviewer comments

* Fix resource timeout issue

* Cleanup

* Fix clang-tidy

* Revert benchmark

* Restructure

* clang-tidy

* Automated change: Fix sanity tests

* Partial commit

* Reviewer comments

* Fixes

* Reviewer comments

* Reviewer comments

* Reviewer comments

* Reviewer comments

* clang-format

* Fix FaultInjection tests

* clang-tidy

Co-authored-by: yashykt <yashykt@users.noreply.github.com>

* To LTS 20211102.0 (grpc#27916)

* internal_ci: rename grpc_xds_k8s_python to psm-security-python as part of tech-debt cleanup and name clarity (grpc#28136)

* Roll-forward grpc#27780 (grpc#27951)

* Revert "Revert grpc#27780 (grpc#27944)"

This reverts commit 26e7560.

* Fix google_api_upbdefs

* use WorkSerializer for subchannel connectivity state notifications (grpc#28111)

* ignore dynamic linker segments in bloat severity calculations (grpc#28149)

* Revert "Revert "use CppImplOf for grpc_server (grpc#28112)" (grpc#28130)" (grpc#28144)

This reverts commit eec0ca9.

* Fix C# nuget package build. (grpc#28152)

* fix nuget build by removing deprecated packageIconUrl field

* react to dotnet pack output fix in .NET

* Arena allocated promise (grpc#28023)

* Arena allocated promise

* finish

* Automated change: Fix sanity tests

* test

* Remove unused names

* fix

* older compiler fix

* fiiixes

* windows fixes?

* clangfmt

* fix windows?

* Document more

* fix destructors

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* [App Net] Switch Router to Mesh and Add unique string to Scope (grpc#28145)

* Add unique suffix to scope

* Actually add suffix

* Switch from Router to Mesh

* Yapf

* Review

* Fix bad reference

* Break circular dependency

* Add a dash

* Introduce empty targets to ease the internal merge of grpc#25586  (grpc#28122)

* add empty targets

* fix format error

* fix build format error

* address reviewer's comments

* fix test build rules

* remove server_auth_fiter from grpc_secure

* Remove unused constants (grpc#28156)

* Api fuzzer overflow bug (grpc#28161)

* fixing overflow error in api fuzzer

* fixing some sanity checks

* fix code style

* change repo mgr to nicolasnoble (grpc#28117)

* Revert "Arena allocated promise (grpc#28023)" (grpc#28171)

This reverts commit 77b4ade.

* Revert "Introduce empty targets to ease the internal merge of grpc#25586  (grpc#28122)" (grpc#28172)

This reverts commit 171c64e.

* Revert "[App Net] Switch Router to Mesh and Add unique string to Scope (grpc#28145)" (grpc#28176)

This reverts commit 7ac79c2.

* Reland arena based promises (grpc#28174)

* Revert "Revert "Arena allocated promise (grpc#28023)" (grpc#28171)"

This reverts commit 9b07a81.

* fix

* Automated change: Fix sanity tests

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* Update cxx docker images (grpc#28162)

* Channel args preconditioning (grpc#28132)

* Channel args preconditioning

* docs

* fixes

* Automated change: Fix sanity tests

* fix

* fix this again after merge error

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* Added workaround for gcc 6.3.0 (grpc#28184)

* Remove unused override, and the static metadata that supports it (grpc#28193)

* Fix cronet tests (grpc#28189)

* add --log_metadata_and_status feature to interop_client (grpc#28021)

* Boringssl update to 4fb1589 (grpc#28194)

* update submodule boringssl-with-bazel with origin/main-with-bazel

* update boringssl dependency to main-with-bazel commit SHA

* regenerate files

* generate boringssl prefix headers

* Increment podspec version

* Use more parallelism to windows portability tests (grpc#28179)

* Use more parallelism to windows portability tests

* Added /MP

* Changed it to gRPC_BUILD_MSVC_MP_COUNT

* Move a bunch of slice typed metadata to new system (grpc#28107)

* Eliminate most of grpc_message metadata handling

* Eliminate most of host metadata handling

* Remove more callouts without fixing code

* fiiixes

* typo

* Automated change: Fix sanity tests

* try-shrink

* Automated change: Fix sanity tests

* size tweaks

* less tricks

* deunique

* commonize

* commonize

* Automated change: Fix sanity tests

* size tuning, fixes

* Automated change: Fix sanity tests

* fix

* size tuning, fixes

* remove constexpr

* fix

* reuse code

* fix

* tweak code

* more tweaks

* tell no lies

* fixes

* fixes

* Automated change: Fix sanity tests

* fix

* fix

* fix

* fix

* fix?

* fix binder

* fix

* fix

* fixes

* Automated change: Fix sanity tests

* fix

Co-authored-by: ctiller <ctiller@users.noreply.github.com>

* Revert "use WorkSerializer for subchannel connectivity state notifications (grpc#28111)" (grpc#28206)

This reverts commit cfca3e5.

* maybe fixed merge?

* fix merge

Co-authored-by: brandonpaiz <brandonpaiz@users.noreply.github.com>
Co-authored-by: Eric Anderson <ejona@google.com>
Co-authored-by: AJ Heller <hork@google.com>
Co-authored-by: Craig Tiller <ctiller@google.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: ctiller <ctiller@users.noreply.github.com>
Co-authored-by: Ming-Chuan <mingcl@google.com>
Co-authored-by: Richard Belleville <rbellevi@google.com>
Co-authored-by: Yash Tibrewal <yashkt@google.com>
Co-authored-by: Esun Kim <veblush@google.com>
Co-authored-by: Mark D. Roth <roth@google.com>
Co-authored-by: Sergii Tkachenko <sergiitk@google.com>
Co-authored-by: Nayef Ghattas <nayef.ghattas@gmail.com>
Co-authored-by: Vignesh Babu <vigneshbabu@google.com>
Co-authored-by: Paulo Castello da Costa <6579971+paulosjca@users.noreply.github.com>
Co-authored-by: ZhenLian <zhenlian@google.com>
Co-authored-by: Lidi Zheng <lidiz@google.com>
Co-authored-by: sanjaypujare <sanjaypujare@users.noreply.github.com>
Co-authored-by: Jan Tattermusch <jtattermusch@users.noreply.github.com>
Co-authored-by: yifeizhuang <yifeizhuang@gmail.com>
Co-authored-by: Hannah Shi <hannahshisfb@gmail.com>
Co-authored-by: donnadionne <donnadionne@google.com>
Co-authored-by: Terry Wilson <tmwilson@google.com>
Co-authored-by: Vignesh2208 <Vignesh2208@users.noreply.github.com>
Co-authored-by: Zach Reyes <39203661+zasweq@users.noreply.github.com>
Co-authored-by: yashykt <yashykt@users.noreply.github.com>
Co-authored-by: yihuaz <yihuaz@google.com>
@yashykt yashykt deleted the XdsClientWorkSerializesr branch May 18, 2023 20:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bloat/medium imported Specifies if the PR has been imported to the internal repository lang/core perf-change/none release notes: yes Indicates if PR needs to be in release notes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants