Commit Graph

518 Commits

Author SHA1 Message Date
Mark D. Roth 38816cf327
[WRR] delegate to pick_first instead of creating subchannels directly (#33087)
As part of the dualstack backend design, change WRR to delegate to
pick_first instead of creating subchannels directly.
2023-06-27 14:20:57 -07:00
Mark D. Roth 27a778fece
[round robin] delegate to pick_first instead of creating subchannels directly (#32692)
More work on the dualstack backend design:
- Change round_robin to delegate to pick_first instead of creating
subchannels directly.
- Change pick_first such that when it is the child of a petiole policy,
it will unconditionally start a health watch.
- Change the client-side health checking code such that if client-side
health checking is not enabled, it will return the subchannel's raw
connectivity state.
- As part of this, we introduce a new endpoint_list library to be used
by petiole policies, which is intended to replace the existing
subchannel_list library. The only policy that will still directly
interact with subchannels is pick_first, so the relevant parts of the
subchannel_list functionality have been copied directly into that
policy. The subchannel_list library will be removed after all petiole
policies are updated to delegate to pick_first.
2023-06-27 09:54:12 -07:00
Mark D. Roth 8427bacaea
[resolver API] remove address attribute interface (#33514)
The address attribute interface was intended to provide a mechanism to
pass attributes separately from channel args, for values that do not
affect subchannel behavior and therefore do not need to be present in
the subchannel key, which does include channel args. However, the
mechanism as currently designed is fairly clunky and is probably not the
direction we will want to go in the long term.

Eventually, we will want some mechanism for registering channel args,
which would provide a cleaner way to indicate that a given channel arg
should not be used in the subchannel key, so that we don't need a
completely different mechanism. For now, this PR is just doing an
interim step, which is to establish a special channel arg key prefix to
indicate that an arg is not needed in the subchannel key.
2023-06-26 10:02:06 -07:00
Eugene Ostroukhov 7bce35ed41
Revert "Revert "[lb pick_first] Enable random shuffling of address list" (#33497)
Original: #33496 

This reverts commit d59c8eb0f5.
2023-06-20 15:53:34 -07:00
Eugene Ostroukhov d59c8eb0f5
Revert "[lb pick_first] Enable random shuffling of address list (#33254)" (#33496)
Original PR: 33254

This reverts commit 7e14a322a2.
2023-06-20 11:25:01 -07:00
Eugene Ostroukhov 7e14a322a2
[lb pick_first] Enable random shuffling of address list (#33254)
Implementation of [gRFC A62](https://github.com/grpc/proposal/blob/master/A62-pick-first.md)
2023-06-20 08:41:36 -07:00
Mark D. Roth 50e970246f
[LB policy API] add helper methods for getting channel creds (#33451)
This addresses a long-standing TODO that we couldn't do prior to #25586.

For details, see internal doc go/grpc-rls-callcreds-to-server.
2023-06-15 12:24:49 -07:00
Mark D. Roth 6a04e9c7e5
[subchannel interface] add method for cancelling data watches (#33359)
This paves the way for cases where we handle health watches in wrapped
subchannels, which we'll need as part of the dualstack backend design.
2023-06-12 15:28:48 -07:00
Yousuk Seung c03cd744b2
[WRR] Prefer application_utilization to cpu_utilization (#33355)
<!--

If you know who should review your pull request, please assign it to
that
person, otherwise the pull request would get assigned randomly.

If your pull request is for a specific language, please add the
appropriate
lang label.

-->
2023-06-07 17:38:29 -07:00
Mark D. Roth 6b4a1e4243
[outlier detection] hack to prevent OD from working with pick_first (#33336)
As per discussion in #32967.
2023-06-05 10:59:40 -07:00
Mark D. Roth 77418492fd
[pick_first] add tests that show handling of multiple addresses (#33255)
This should help you get an idea of how to write the tests for #33254.
2023-05-26 09:47:37 -07:00
Mark D. Roth ba1b8b15ea
[JSON] fix bug that incorrectly allowed trailing commas after an empty container (#33158) 2023-05-17 11:42:14 -07:00
Mark D. Roth a78001a087
[resolver] remove unused ctor for ServerAddress (#33148)
Co-authored-by: markdroth <markdroth@users.noreply.github.com>
2023-05-16 16:53:01 -07:00
Mark D. Roth 8fdfb22848
[JSON] generalize handling of RefCountedPtr<> (#33048)
Also remove a check in the weighted_target LB policy that I somehow
missed in #32932.
2023-05-11 13:49:59 -07:00
Mark D. Roth 2c423d277c
[outlier detection] fix crash with pick_first and add tests (#33069)
Fixes #32967.

Also fix incorrect defaults for `enforcementPercentage` fields.
2023-05-10 13:33:04 -07:00
Mark D. Roth 17315823c2
[client channel] assume LB policies start in CONNECTING state (#33009)
Currently, we are not very consistent in what we assume the initial
state of an LB policy will be and whether or not we assume that it will
immediately report a new picker when it gets its initial address update;
different parts of our code make different assumptions. This PR
establishes the convention that LB policies will be assumed to start in
state CONNECTING and will *not* be assumed to report a new picker
immediately upon getting their initial address update, and we now assume
that convention everywhere consistently.

This is a preparatory step for changing policies like round_robin to
delegate to pick_first, which I'm working on in #32692. As part of that
change, we need pick_first to not report a connectivity state until it
actually sees the connectivity state of the underlying subchannels, so
that round_robin knows when to swap over to a new child list without
reintroducing the problem fixed in #31939.
2023-05-09 13:37:16 -07:00
Mark D. Roth 1432fe4e4c
[JSON] make API public but experimental (#32987)
This makes the JSON API visible as part of the C-core API, but in the
`experimental` namespace. It will be used as part of various
experimental APIs that we will be introducing in the near future, such
as the audit logging API.
2023-05-09 08:05:24 -07:00
Mark D. Roth e872fb91d9
[WRR] fix some edge cases in scheduler logic (#33045)
This corresponds to two recent changes made to our internal
implementation. See b/276292666 for details.
2023-05-08 17:33:59 -07:00
Mark D. Roth 844e740183
[JSON] Replace ctors with factory methods (#32834) 2023-05-02 09:22:42 -07:00
Eugene Ostroukhov ac228814a0
[core] Expand core attributes to hold values of any type (#32835) 2023-05-01 19:07:20 -07:00
Mark D. Roth 020e9b4dd6
[WRR] Remove env var guard for WRR policy (#32936)
- remove the `_experimental` suffix from the gRPC policy name
- remove the env var guard for the xDS policy config
2023-04-26 09:40:22 -07:00
Mark D. Roth 9393cd887c
[JSON] remove mutable accessor methods. (#32806)
Co-authored-by: markdroth <markdroth@users.noreply.github.com>
2023-04-06 13:37:42 -07:00
Stan Hu 4110dea333
[HTTP Proxy] Support CIDR blocks in `no_proxy` config (#31119)
This commit adds support for using CIDR blocks defined in the `no_proxy`
environment variable. For example:

```
http_proxy=http://localhost:8080 no_proxy=10.10.0.0/24
```

The example above would bypass the proxy if the server IP matched
10.10.0.0 - 10.10.0.255.

Closes #22681

---------

Co-authored-by: Yash Tibrewal <yashkt@google.com>
2023-03-30 23:43:36 -07:00
Mark D. Roth 36d2716d52
[JSON] move Parse() and Dump() methods out of JSON object (#32742)
More prep for making this a public API.
2023-03-30 13:30:54 -07:00
Craig Tiller 175ccc3a90
Reland global config changes (#32661)
<!--

If you know who should review your pull request, please assign it to
that
person, otherwise the pull request would get assigned randomly.

If your pull request is for a specific language, please add the
appropriate
lang label.

-->

---------

Co-authored-by: ctiller <ctiller@users.noreply.github.com>
2023-03-27 18:55:24 -07:00
Yousuk Seung 16c03db9ac
Revert "Revert "WRR: Support EPS" (#32723)" (#32725)
This reverts commit 7bd9267f32.




<!--

If you know who should review your pull request, please assign it to
that
person, otherwise the pull request would get assigned randomly.

If your pull request is for a specific language, please add the
appropriate
lang label.

-->
2023-03-27 16:49:50 -07:00
Esun Kim 7bd9267f32
Revert "WRR: Support EPS" (#32723)
Reverts grpc/grpc#32657
2023-03-27 11:53:17 -07:00
Yousuk Seung 4429066516
WRR: Support EPS (#32657)
<!--

If you know who should review your pull request, please assign it to
that
person, otherwise the pull request would get assigned randomly.

If your pull request is for a specific language, please add the
appropriate
lang label.

-->
2023-03-24 16:23:51 -07:00
Jan Tattermusch 0c1797cd9f
Revert "[config] Move global config alongside core configuration" (#32659)
Reverts grpc/grpc#30788

(it breaks grpc_objc_bazel_test (see
https://github.com/grpc/grpc/pull/30788#issuecomment-1476372187) and
also seems to be breaking some other internal stuff).
2023-03-20 08:22:29 -07:00
Craig Tiller b7a83305e6
[config] Move global config alongside core configuration (#30788)
This is a big rewrite of global config.

It does a few things, all somewhat intertwined:
1. centralize the list of configuration we have to a yaml file that can
be parsed, and code generated from it
2. add an initialization and a reset stage so that config vars can be
centrally accessed very quickly without the need for caching them
3. makes the syntax more C++ like (less macros!)
4. (optionally) adds absl flags to the OSS build

This first round of changes is intended to keep the system where it is
without major changes. We pick up absl flags to match internal code and
remove one point of deviation - but importantly continue to read from
the environment variables. In doing so we don't force absl flags on our
customers - it's possible to configure grpc without the flags - but
instead allow users that do use absl flags to configure grpc using that
mechanism. Importantly this lets internal customers configure grpc the
same everywhere.

Future changes along this path will be two-fold:
1. Move documentation generation into the code generation step, so that
within the source of truth yaml file we can find all documentation and
data about a configuration knob - eliminating the chance of forgetting
to document something in all the right places.
2. Provide fuzzing over configurations. Currently most config variables
get stashed in static constants across the codebase. To fuzz over these
we'd need a way to reset those cached values between fuzzing rounds,
something that is terrifically difficult right now, but with these
changes should simply be a reset on `ConfigVars`.

<!--

If you know who should review your pull request, please assign it to
that
person, otherwise the pull request would get assigned randomly.

If your pull request is for a specific language, please add the
appropriate
lang label.

-->

---------

Co-authored-by: ctiller <ctiller@users.noreply.github.com>
2023-03-17 16:56:45 -07:00
Yash Tibrewal 657c1da1b0
HttpProxyMapperTest: cleanup (#32572)
<!--

If you know who should review your pull request, please assign it to
that
person, otherwise the pull request would get assigned randomly.

If your pull request is for a specific language, please add the
appropriate
lang label.

-->
2023-03-08 16:05:46 -08:00
apolcyn 18d1341b94
c2p resolver test: override the XDS server address, point it to a fake server that immediatley closes the connection (#32499)
Alongside https://github.com/grpc/grpc/pull/32496, this makes this test
behave the same on all platforms.

FWIW, I verified this causes us to see the previous lock cycle problem
in https://github.com/grpc/grpc/pull/32491 on linux - originally that
lock cycle was only on mac, because of environmental differences between
mac and linux in CI.
2023-02-28 22:54:22 -08:00
Mark D. Roth 3faeb3af80
client channel: create a header file for internal interfaces (#32423)
This is just a bit of a code reorganization, no functional changes.
2023-02-21 13:12:29 -08:00
Esun Kim 905df9dee6
Update Abseil to 20230125 (#32139)
* Update abseil to 1.20230125.0

* Fix IWYU
2023-01-30 16:20:24 -08:00
Eugene Ostroukhov 42a25af871
xds_override_host LB: make subchannel keys consistent with the filter (#32224) 2023-01-26 16:23:08 -08:00
Eugene Ostroukhov 4a64142be5
xds_override_host LB: add support for draining state (#32191)
* Revert "Revert "xds_override_host LB: add support for draining state (#31985)" (#32189)"

This reverts commit 5222eafdc1.

* fixup: Add missing dependency to grpc_xds_client targetZ
2023-01-24 15:12:06 -08:00
AJ Heller 5222eafdc1
Revert "xds_override_host LB: add support for draining state (#31985)" (#32189)
This reverts commit e8e9514a11.
2023-01-24 12:03:49 -08:00
Eugene Ostroukhov e8e9514a11
xds_override_host LB: add support for draining state (#31985)
Co-authored-by: Mark D. Roth <roth@google.com>
2023-01-24 09:15:33 -08:00
Yash Tibrewal aa11978541
Fix include guards for src/ and test/ directories (#32167)
* Fix include guards for src/ and test/ directories

* Sanity

* Update new files
2023-01-20 16:27:27 -08:00
Mark D. Roth 76c82265b4
WRR: implement WRR LB policy (#31904)
* WRR: port StaticStrideScheduler to OSS

* WIP

* Automated change: Fix sanity tests

* fix build

* remove unused aliases

* fix another type mismatch

* remove unnecessary include

* move benchmarks to their own file, and don't run it on windows

* Automated change: Fix sanity tests

* add OOB reporting

* generate_projects

* clang-format

* add config parser test

* clang-tidy and minimize lock contention

* add config defaults

* add oob_reporting_period config field and add basic test

* Automated change: Fix sanity tests

* fix test

* change test to use basic RR

* WIP: started exposing peer address to LB policy API

* first WRR test passing!

* small cleanup

* port RR fix to WRR

* test helper refactoring

* more test helper refactoring

* WIP: trying to fix test to have the right weights

* more WIP -- need to make pickers DualRefCounted

* fix timer ref handling and get tests working

* clang-format

* iwyu and generate_projects

* fix build

* add test for OOB reporting

* keep only READY subchannels in the picker

* add file missed in a previous commit

* fix sanity

* iwyu

* add weight expiration period

* add tests for weight update period and OOB reporting period

* Automated change: Fix sanity tests

* lower bound for timer interval

* consistently apply grpc_test_slowdown_factor()

* cache time in test

* add blackout_period tests

* avoid some unnecessary copies

* clang-format

* add field to config test

* simplify orca watcher tracking

* attempt to fix build

* iwyu

* generate_projects

* add "_experimental" suffix to policy name

* WRR: update tests to cover qps plumbing

* WIP

* more WIP

* basic WRR e2e test working

* add OOB test

* fix sanity

* ignore duplicate addresses

* Automated change: Fix sanity tests

* add new tracer to doc/environment_variables.md

* retain scheduler state across pickers

* Automated change: Fix sanity tests

* use separate mutexes for scheduler and timer

* sort addresses to avoid index churn

* remove fetch_sub for wrap around in RR case

Co-authored-by: markdroth <markdroth@users.noreply.github.com>
2023-01-20 12:14:37 -08:00
Mark D. Roth c8407f8ef9
xDS: consistently use "override_host" instead of "host_override" (#32153)
* xDS: consistently use "override_host" instead of "host_override"

* fix test
2023-01-19 11:59:56 -08:00
Eugene Ostroukhov 73fa138432
xds_override_host LB: move XdsOverrideHostLbConfig to `internal` namespace (#32061) 2023-01-11 10:29:38 -08:00
Eugene Ostroukhov a111948602
xds_override_host LB: account for subchannel connectivity state (#31914) 2023-01-04 09:37:19 -08:00
Eugene Ostroukhov 875066b61e
tests: Validate subchannel state transitions (#31971) 2022-12-27 09:25:38 -08:00
Yijie Ma f99b8b5bc4
Convert c-style comments to C++-style comments (#31923)
* baseline

* fix clang-tidy

* manually revert these files

* manually fixup at eof

* revert 2 more files

* change check_deprecated_grpc++.py

* change end2end_defs.include template

* fix check_include_guards.py

* untrack tools/distrib/python/convert_cstyle_comments_to_cpp.py

not yet ready to be submitted

* fix

yapf check_include_guards.py
remove a space...

* fix version.cc.template

* fix version_info.h.template
2022-12-22 23:01:53 -08:00
Eugene Ostroukhov 878a0ea6c2
xds_override_host LB: add basic support for overriding host (#31954)
This is same as #31819 but with fixed compilation issues.
2022-12-21 16:30:09 -08:00
Craig Tiller feb43c589f
[iwyu] Better error checking in script (#31957)
* fff

* fff

* fff

* better error checking

* x

* fix

* Automated change: Fix sanity tests

Co-authored-by: ctiller <ctiller@users.noreply.github.com>
2022-12-21 14:55:33 -08:00
Eugene Ostroukhov 60e4aea792
Revert "xds_override_host LB: add basic support for overriding host (#31819)" (#31948)
This reverts commit a500a74c6c.
2022-12-21 10:02:39 -08:00
Eugene Ostroukhov a500a74c6c
xds_override_host LB: add basic support for overriding host (#31819)
Implement picking the subchannel by address if the address is provided to a policy.

Co-authored-by: Mark D. Roth <roth@google.com>
2022-12-21 10:00:15 -08:00
Mark D. Roth 1482bf9d18
round_robin: avoid spurious updates when switching subchannel lists (#31939)
* round_robin: avoid spurious updates when switching subchannel lists

* clang-format

* clang-tidy
2022-12-21 07:35:49 -08:00