Commit Graph

180 Commits

Author SHA1 Message Date
Craig Tiller 2cd1501ca5
[promises] Filter unit test framework (#32110)
Built atop #31448 

Offers a simple framework for testing filters.

<!--

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-28 21:53:14 -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
Craig Tiller a363b6c001
[fuzzing] Implement endpoints for FuzzingEventEngine (#32689)
Implement listeners, connection, endpoints for `FuzzingEventEngine`.
Allows the fuzzer to select write sizes and delays, connection delays,
and port assignments.

I made a few modifications to the test suite to admit this event engine
to pass the client & server tests:
1. the test factories return shared_ptr<> to admit us to return the same
event engine for both the oracle and the implementation - necessary
because FuzzingEventEngine forms a closed world of addresses & ports.
2. removed the WaitForSingleOwner calls - these seem unnecessary, and we
don't ask our users to do this - tested existing linux tests 1000x
across debug, asan, tsan with this change

Additionally, the event engine overrides the global port picker logic so
that port assignments are made by the fuzzer too.

This PR is a step along a longer journey, and has some outstanding
brethren PR's, and some follow-up work:
* #32603 will convert all the core e2e tests into a more malleable form
* we'll then use #32667 to turn all of these into fuzzers
* finally we'll integrate this into that work and turn all core e2e
tests into fuzzers over timer & callback reorderings and io
size/spacings

---------

Co-authored-by: ctiller <ctiller@users.noreply.github.com>
2023-03-27 17:43:47 -07:00
AJ Heller 3fe678e306
[EventEngine] Add EventEngine::*Handle equality operators (#32695)
This allows us to replace `absl::optional<TaskHandle>` with checks
against the invalid handle.

This PR also replaces the differently-named invalid handle instances
with a uniform way of accessing static invalid instances across all
handle types, which aids a bit in testing.
2023-03-23 15:31:24 -07:00
Craig Tiller bca85495d4
[event_engine] Add a maximally threaded event engine wrapper (#32691)
Add an event manager that spawns threads just as much as it possibly
can... to expose TSAN to the myriad thread ordering problems in our code
base.

Next steps for this will be to add a new test mode for tsan + thready
event engine + a few other doodads to increase threads in the system
(party.cc in particular has a good place for a hook).

<!--

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-23 11:37:20 -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
apolcyn e97f632886
[testing] make error check in log_too_many_open_files_test portable (#32595)
The error message for EMFILE is different on Musl, so this test is
currently broken portability tests on Musl:
https://source.cloud.google.com/results/invocations/d742bd83-bd28-49a3-b64a-442d0667231e/targets/github%2Fgrpc%2Frun_tests%2Fcpp_linux_dbg_native_x64_gcc_musl/tests
2023-03-13 13:47:32 -07:00
AJ Heller 1548038a09
[EventEngine] Windows endpoints keep their EventEngines alive (#32560)
Discovered via `bazel test
--test_env=GRPC_EXPERIMENTS=event_engine_client
//test/core/iomgr:endpoint_pair_test`. CI experiments can be enabled
generally on Windows once a few fixes and improvements are completed.
2023-03-08 08:04:35 -08:00
apolcyn 27ee3913d1
[iomgr and EE logging] Log ERROR if socket() returns EMFILE on posix (#32204)
There are potentially surprising deployment bugs that can cause `EMFILE`
to be hit. For example, file descriptor limits can be easily reached if
- the round robin LB policy is used
- the load balancer hands out an assignment with a lot of backends
- using debian's default 1024 file descriptor limit.

To make such problems more apparent, we can pay special attention to
this error and log ERROR when it happens.

Related: b/265199104
2023-03-03 13:18:01 -08:00
AJ Heller 8f7cd1eeed
[EventEngine] WindowsEventEngine Listener v2 (#32488)
Continued from https://github.com/grpc/grpc/pull/32295 after landing the
cleanup and logging pieces separately.
2023-02-28 20:33:03 -08:00
AJ Heller e164ef7460
[EventEngine] Add Listener Bind-after-Start test (#32502)
This also alters changes the PosixEventEngine to return a failure status
instead of crashing.

cc @yijiem
2023-02-28 18:30:53 -08:00
AJ Heller f059259182
[EventEngine] PosixEventEngine: Replace on_shutdown InternalError with more appropriate type (#32468)
I've replaced all use of `InternalError` here because none of these
scenarios would necessarily merit a bug or outage report.

Identified in the fuchsia test suite: calling the Listener's
`on_shutdown` method with anything other than `absl::OkStatus()` would
fail some assertions in the Posix-specialized client test suite if the
Oracle were implemented similarly. It _should_ fail the same way in the
listener test suite, but the statuses are ignored. I've fixed that.
2023-02-24 11:08:09 -08:00
Vignesh Babu 8fdc82f33d
[EventEngine] Update Endpoint API to return true if read/write succeeds immediately (#32370)
Requires cherrypick
2023-02-23 09:51:21 -08:00
AJ Heller b53f6fde67
Reland "[EventEngine] WindowsEventEngine Endpoint and Socket fixes" (#32440)
Relands #32385 (reverted in #32419) with fixes.

The Windows build is clean on a test cherrypick: cl/511291828

<!--

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: drfloob <drfloob@users.noreply.github.com>
2023-02-21 16:00:14 -08:00
Craig Tiller 8d5559d713
Revert "[EventEngine] WindowsEventEngine Endpoint and Socket fixes" (#32419)
Reverts grpc/grpc#32385

Co-authored-by: Yijie Ma <yijiem.main@gmail.com>
2023-02-16 11:36:39 -08:00
AJ Heller a879544a65
[EventEngine] WindowsEventEngine Endpoint and Socket fixes (#32385)
A handful of problems were identified while writing the
WindowsEventEngine Listener. To make the listener review easier, these
fixes can be landed separately.

This is built upon https://github.com/grpc/grpc/pull/32376

Problems that are fixed in this PR:
* `OnConnectCompleted` held a Mutex while calling the user callback,
which can deadlock.
* The WinSocket and some associated data needs to remain alive after the
Endpoint destroyed, since Windows IOCP still needs to use some of that
data. Endpoint destruction and socket shutdown are now decoupled, with
the socket managed by a shared_ptr.

<!--

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: drfloob <drfloob@users.noreply.github.com>
2023-02-15 15:58:38 -08:00
AJ Heller b453af1ecf
[EventEngine] Fix IOCP test under load (#32328) 2023-02-08 15:11:53 -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
AJ Heller 6a92df7237
[fixup] EventEngine Nomenclature (#32195) 2023-01-25 09:31:46 -08:00
AJ Heller 3980ed706a
[EventEngine] Refactoring the EventEngine Test Suite: Part 1 (#32127)
* Add back EventEngine test suite tools (echo binary)

This reverts commit d5c12195a2.

* more refactoring

* fix

* Automated change: Fix sanity tests

* fix

* fix posix oracle build def

* fix FuzzingEventEngine includes

* sanitize

* tidy and rm DNS

* fix cfstream includes

* header guards

* format & fix deps

* fix

* fix

* iwyu

* fix

* remove redundant code

* reviewer feedback

Co-authored-by: drfloob <drfloob@users.noreply.github.com>
2023-01-24 09:54:40 -08:00
Vignesh Babu 8cf04e9a54
[EventEngine] Modify iomgr to allow creation of event engine clients and client side endpoints (#31661)
* [WIP] EventEngine iomgr endpoint shims

* [WIP] EventEngine::Endpoint iomgr shims for the PosixEventEngine

* Util functions to help with posix engine listener implementation

* sanity

* update comments in posix_engine_listener_utils.h

* review comments

* iwyu

* revert prev commit

* iwyu

* update build

* update

* regenerate projects

* regenerate projects

* minor fixes

* update BUILD

* sanity

* update build

* regenerate projects

* fix unused parameter

* sanity

* update

* sanity

* regenerate_projects

* remove unused variable

* start

* update

* regenerate_projects

* sanity

* update

* fixes

* update

* regenerate_projects

* update

* fix sanity and msan failure

* more fixes

* build failure

* update

* fix

* sanity

* fixes

* update

* regenerate projects

* fix sanity

* review comments

* An EventEngine subclass to be implemented by all posix based event engines

* sanity

* comments

* update

* review comments

* re-word

* fix

* update

* review comments

* regenerate projects

* syntax fix

* add lock free event benchmark

* releasable mutex lock

* fix build isue

* update

* start

* regenerate projects

* update

* fix

* windows build

* update

* windows portability issue

* update

* update

* update

* update

* format

* update

* update

* update

* update

* update

* fix sanity

* regenerate projects

* update

* iwyu

* Fix resolved address length related bugs in tcp_socket_utils and listener_utils

* iwyu

* cleanup src/core/lib/event_engine/tcp_socket_utils.cc

* iwyu

* fix

* regenerate projects

* fix sanity

* re-write endpoint shim

* more re-write

* cleanup

* update

* review comments

* build issue

* more build issue fixes plus adding event_engine_trace

* even more build issue fixes

* iwyu

* add static_cast

* update

* remove redundant code

* update

* deduplicate

* iwyu

* Fix review comments and regenerate_projects

* sanity

* review comments

* fix include guards

Co-authored-by: AJ Heller <hork@google.com>
2023-01-20 19:47:14 -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
AJ Heller 41e7aff3be
[EventEngine] Update EventEngine client experiment (#32099)
* [EventEngine] Update EventEngine client experiment

This bumps the expiry timeline, and guards certain poller behavior
behind the flag. The Epoll1 poller has been shown to not support fork
events, which is a problem for Python. Fixes for that are incoming, but
for now, the poller instantiation is guarded behind the flag as well.

* force the EE endpoint experiment on for posix EventEngine tests

* fix experiment code, it was not respecting forced values
2023-01-13 12:48:26 -08:00
Hannah Shi 24e158d5a9
[ObjC]cf event engine timer (#31140)
* Apple CF event engine using posix timer

* update generated files

* fix ci errors
2023-01-12 16:31:58 -08:00
AJ Heller 6778bb3501
[EventEngine] Relandx3: WindowsEventEngine client (#32031)
* Reland x3: "WindowsEventEngine Client implementation (#31848)"

This reverts commit 2c4d55b3a1.

* fixes

* fix

* fix
2023-01-12 10:26:17 -08:00
Craig Tiller 67f364e23e
[cleanup] Eliminate usage of GRPC_ASSERT(false...); (#31757)
* crash function

* progress

* fix

* fix

* Automated change: Fix sanity tests

* fix

* fix

* fix

* fixes

* Automated change: Fix sanity tests

* fix

* Automated change: Fix sanity tests

* fix

* fix

* use cpp attr

* Automated change: Fix sanity tests

* fix

* fix

* fix

* fix

* fix

* fix

* add exclusion

* fix

* typo

* fix

* fmt

* Update tcp_socket_utils.cc

* Automated change: Fix sanity tests

* fix

* revert php changes

* Automated change: Fix sanity tests

Co-authored-by: ctiller <ctiller@users.noreply.github.com>
2023-01-11 08:50:32 -08:00
AJ Heller 91cb4a941b
[EventEngine] ThreadPool: pause closure execution on fork events (#31994)
* [EventEngine] ThreadPool: pause execution of closures on fork

* update tests

* iwyu

* disable test

* iwyu
2023-01-10 10:51:15 -08:00
Vignesh Babu 3baeab973a
Remove posix_event_engine_polling_enabled experiment (#32037)
* Remove posix_event_engine_polling_enabled experiment

* regenerate projects
2023-01-06 13:53:55 -08:00
AJ Heller 5db6de8634
[༺ EventEngine ༻] Specify requirements for Run* immediate execution (#32028)
* [༺ EventEngine༻ ] Specify requirements for Run* immediate execution

Also adds test suite tests that may catch non-conforming implementations
(Run called ~3200 times in case it's non-deterministic).

* fix

* verbiage; longer timeout

* fix int type comparison warning

* rm illegal term

* Automated change: Fix sanity tests

* disable tests

Co-authored-by: drfloob <drfloob@users.noreply.github.com>
2023-01-05 16:26:00 -08:00
AJ Heller 2c4d55b3a1
Revert "Revert "Revert "WindowsEventEngine Client implementation (#31848)" (#… (#31974)" (#32018)
This reverts commit aa83319695.
2023-01-04 11:09:56 -08:00
Vignesh Babu 8bd2b9af52
Fixing some bugs in posix event engine (#31785)
* update

* regenerate projects

* fix sanity

* review comments

* fix

* add lock free event benchmark

* releasable mutex lock

* fix build isue

* update

* fix sanity

* regenerate projects

* iwyu

* Fix resolved address length related bugs in tcp_socket_utils and listener_utils

* iwyu

* cleanup src/core/lib/event_engine/tcp_socket_utils.cc

* update endpoint to use SliceCast into MutableSlice

* fix sanity

* review comments

* review comments

* regenerate projects

* fix

* rm unused variable

* fix
2023-01-03 17:52:46 -08:00
AJ Heller aa83319695
Revert "Revert "WindowsEventEngine Client implementation (#31848)" (#… (#31974)
* Revert "Revert "WindowsEventEngine Client implementation (#31848)" (#31965)"

This reverts commit 58ad7950a0.

* iwyu & visibility
2023-01-03 16:21:29 -08:00
Craig Tiller a414dbd304
Revert #30349 (#32008)
* [iwyu] Add missing #include <type_traits> to fix build breakage with LLVM after e0a66116fc

* Update IWYU mappings

New libc++ doesn't provide <type_traits> when including <utility>.

* run iwyu

Co-authored-by: alexfh <alexfh@google.com>
2023-01-03 11:00:30 -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
AJ Heller 58ad7950a0
Revert "WindowsEventEngine Client implementation (#31848)" (#31965)
This reverts commit bc7e155e55.
2022-12-22 09:59:14 -08:00
AJ Heller bc7e155e55
WindowsEventEngine Client implementation (#31848)
* rename task-handle mutex

* rename TimerClosure

* tmp commit, building, not tested

* add test for client connection to a non-listening port

* fix posix EE tests

* re-fix windows test suite after posix compatibility

* (unfinished, backup): passing the suite's NonExistingListener client test

* remove redundant windows client test

* integrate IOCP worker loop

* initial commit of echo test tool; fixes

* move echo client to test_suite/tools; I do not yet like the setup, it's about time for a macro that generates all useful test/tool targets

* cleanup

* add --target arg to echo_client. requires URI

* Automated change: Fix sanity tests

* build fixes

* fix

* fix

* reviewer feedback

* warning fix

* delete logic on cancellation

* fix

* cancel connect deadlock; improved template code

* fix build failure with linux environments building windows targets

* fix

* fix

* no ++ for atomics

* remove the test changes, to be landed separately

* Automated change: Fix sanity tests

* remnants

Co-authored-by: drfloob <drfloob@users.noreply.github.com>
2022-12-20 17:04:54 -08:00
Craig Tiller 49a3035d44
[iwyu] Fix CI job (#31921)
* fix-includes

* fix

* fix

* fix

* fix

* fix

* Automated change: Fix sanity tests

* add warning label

Co-authored-by: ctiller <ctiller@users.noreply.github.com>
2022-12-19 08:18:39 -08:00
AJ Heller 18029913b9
Remove posix_engine namespace (#31787)
* Remove posix_engine namespace

* Automated change: Fix sanity tests

* rm redundant using statements

Co-authored-by: drfloob <drfloob@users.noreply.github.com>
2022-12-06 10:45:06 -08:00
Mark D. Roth 5e4d9f4bcf
xDS stateful session affinity: implement C-core filter (#31788)
* stateful session affinity: implement filter

* register filter config parser

* fix unused parameter errors

* remove some FIXMEs that are not longer needed

* clang-tidy

* iwyu

* iwyu

* revert iwyu changes to observability_logging_sink.cc

* generate_projects

* shorten filter name

* don't use absl::optional for path

* fix build

* don't add cookie to trailing metadata unless it's Trailers-Only
2022-12-05 16:32:04 -08:00
Cheng-Yu Chung f5d21653fc
Revert "[event_engine] Move combiner executor usage to event engine (#31713)" (#31753)
This reverts commit b04aa1cf92.

Co-authored-by: AJ Heller <hork@google.com>
2022-11-30 11:13:57 -08:00
AJ Heller 557e558825
[EventEngine] WindowsEndpoint (#31735)
* [EventEngine] WindowsEndpoint

Initial sketch, all tests passing

* Port fix from #28432

* GPR_WINDOWS guard

* use MemoryAllocator::MakeReservation for allocated buffers

* better logging (respect slice length)

* Automated change: Fix sanity tests

* improvements

* Automated change: Fix sanity tests

* InlinedVector<WSABUF, kMaxWSABUFCount>

* initial attempt at socket util reunification

* posix fixes + local run of sanitize.sh

* posix socket includes

* fix

* Automated change: Fix sanity tests

* remove unused include (breaks windows)

* remove stale comment

Co-authored-by: drfloob <drfloob@users.noreply.github.com>
2022-11-28 14:13:10 -08:00
Cheng-Yu Chung 77b3972f95
Clean up the TODO item in build target `grpc_base` part `channel_args` (#31642)
* Clean up the TODO item in build target `grpc_base` part `channel_args`

* Update

* Update

* Update

* Automated change: Fix sanity tests

* update

* Automated change: Fix sanity tests
2022-11-23 16:01:34 -05:00
AJ Heller 0c5a17ce62
Improve Windows network error logging in IOCP test (#31742)
* Improve Windows network error logging in IOCP test

* reviewer feedback
2022-11-22 12:39:15 -08:00
Craig Tiller b04aa1cf92
[event_engine] Move combiner executor usage to event engine (#31713)
* [event_engine] Move combiner executor usage to event engine

* fix

* review feedback

* fix

* x

* fix

* fix
2022-11-22 12:14:22 -08:00
AJ Heller b66829429e
Return unique_ptrs from IOCP::Watch (#31731)
* Return unique_ptrs from IOCP::Work

* Automated change: Fix sanity tests

* fix banned function

Co-authored-by: drfloob <drfloob@users.noreply.github.com>
2022-11-21 15:40:18 -08:00
Vignesh Babu c5a66bb08d
Posix Event Engine listener implementation (#31513)
* Util functions to help with posix engine listener implementation

* sanity

* update comments in posix_engine_listener_utils.h

* review comments

* iwyu

* revert prev commit

* iwyu

* update build

* update

* regenerate projects

* regenerate projects

* minor fixes

* update BUILD

* sanity

* update build

* regenerate projects

* fix unused parameter

* sanity

* update

* sanity

* regenerate_projects

* remove unused variable
2022-11-16 13:52:51 -08:00
Vignesh Babu 864f08ff0c
Fix broken clang-tidy (#31666) 2022-11-15 15:17:13 -08:00
Vignesh Babu 1e2af690f2
Add a check to flush stale TracedBuffer entries to prevent them growing too long. (#31588)
* Add a check to flush stale TracedBuffer entries to prevent them growing too long

* update

* fix tsan and sanity

* sanity

* review comments
2022-11-15 10:06:06 -08:00
Esun Kim 26bc68c4af
Added readability-duplicate-include (#31608)
* Added readability-duplicate-include

* Fix

* format
2022-11-10 13:18:40 -08:00