[PH2] Fixing circular dependency
`Http2SettingsManager` needs `frame.h`.
Our new validation code in frame.h needs `Http2Settings`.
So we split `Http2Settings` and `Http2SettingsManager` into 2 separate header files to resolve the circular dependency.
Closes#40204
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40204 from tanvi-jagtap:ph2_fixing_circular_dependency 17718955eb455aa8d20840d9d0a9a8712c63dd01
PiperOrigin-RevId: 783114803
Defines a new src/core:fused_filters containing registrations of fused filters and also makes changes to filter_fusion to ensure it compiles.
This PR enables registration of the fused filters under a new experiment.
Closes#39697
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39697 from Vignesh2208:fusing-filters 34303b21c162597d54a2fbe02fcd76eaa88f5150
PiperOrigin-RevId: 780146277
Change was created by the release automation script. See go/grpc-release.
Closes#40120
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40120 from veblush:bump_dev_version_202507041728 e403e80e566f334809e93e421d552d0b99076f68
PiperOrigin-RevId: 779336318
Update absl dependency to https://github.com/abseil/abseil-cpp/releases/tag/20250512.1
As part of this upgrade, remove gRPC's usage of internal absl helper functions.
A similar fix is needed for OpenCensus-Cpp, but since that repo is archived, I am choosing to add in a patch. The aim is to delete our OpenCensus plugin so that we don't have to maintain this forever as per https://github.com/grpc/proposal/pull/496.
Closes#39571
PiperOrigin-RevId: 777770232
[PH2] Fixing transport bugs for ping pong
1. Ensuring that `"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"` is the first thing to be written . Modifying our unit tests for the same.
2. Removing forced sending of the first settings frame. That is already taken care of by connector.
3. Fixing a wrong CHECK statement that was causing a crash.
4. Handling RST_STREAM being used even in non-error cases.
Closes#40013
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40013 from tanvi-jagtap:ph2_fix_transport_for_ping_pong 7f3464f7014792e9605085f719e3b174114c12de
PiperOrigin-RevId: 776447114
[PH2] BUILD only changes so I can code in peace
Closes#39931
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39931 from tanvi-jagtap:ph2_build_files_make_me_cry 67b897d8a2bd4076f70f19ea82a41531af9eb1df
PiperOrigin-RevId: 775550063
This will allow open extensibility of the set of types available for property list (we no longer need to add them to the PropertyList type itself), and allow for other shaped types to do the same set of conversions.
PiperOrigin-RevId: 772039595
Starting towards a transition to channelz-v2 - I'm adding this and probably some more container types for variously shaped generic output mechanisms.
The final protobufs we use will be a combination of structures that can back this and structures that are tuned specifically for various subsystems that don't represent cleanly here.
As soon as is practicable I'll be removing the JSON backing and transitioning everything to be implemented directly atop protobufs, and having shims such as this in place will greatly help that effort.
Closes#39807
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39807 from ctiller:plist 24928963d72422c0a21712f3e2e91ffe5640e457
PiperOrigin-RevId: 771317541
Ok, so very deep template magicks... but... actually not terribly bad to read either?
Adds a function `MemoryUsage(x)` that returns some reasonable approximation of the memory used by `x`.
Understands a bunch of types we use, and has an escape hatch for adding custom behavior for other types.
Super usefully, it knows how to take:
```
struct Foo { X x; Y y; };
```
and decompose `MemoryUsage(Foo{a,b});` into `MemoryUsage(a) + MemoryUsage(b) + struct_padding_in_foo`
... this change also includes modifications to ztrace to use it in anger to demonstrate that the system works.
Closes#39701
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39701 from ctiller:memory-usage 0b14aa6f9ea3757443a6d14b7f968e9868e3365a
PiperOrigin-RevId: 765257120
Change was created by the release automation script. See go/grpc-release.
Closes#39614
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39614 from yashykt:bump_dev_version_202505211516 89b3566bfa45e56bc555a70f9a61832ba26274d5
PiperOrigin-RevId: 762218178
This rolls forward the Executor removal PR, with use-after-free fixes for the iomgr native resolver. See https://github.com/grpc/grpc/pull/39422 for the original landing
Closes#39578
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39578 from drfloob:fix20250515 df648f59a004e723e942773ec2030b14965d2d3c
PiperOrigin-RevId: 761119402
This PR adds ping functionality to the client transport.
Closes#39399
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39399 from ac-patel:ping_usage 7f4a4a4e9722702c867845970776dab86663539e
PiperOrigin-RevId: 760605950
Just the genesis for the moment... but we'll extend this for all combinators to get introspection of state, and then make this available for all promise combinators.
Closes#39580
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39580 from ctiller:jsonp ccd76b74375c12331b8a079c95e417a9a94b33ff
PiperOrigin-RevId: 759436377
This removes the last remaining uses of the iomgr Executor, and replaces all references to it in the documentation.
Closes#39422
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39422 from drfloob:rm-executor 3ff8c54df71a009c48279c8442512ef9d98212c6
PiperOrigin-RevId: 758890190
This is not at the point where it's "secure" yet, but we can perform a handshake and get encrypted data.
Closes#39427
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39427 from ctiller:seccg2 9742a47a96b438e49eb885f0cb5c80e7eb0fb02b
PiperOrigin-RevId: 753380790
Previously channelz kept an index of all objects in a global std::map protected by a single mutex.
Instead: split the index in two. The first is a list of all base nodes, queryable on demand, sharded by pointer. These base nodes are available, but un-numbered. The id allocation then occurs whenever channelz is actually queried. At that point unnumbered nodes can be iterated and numbered sequentially, keeping that essential invariant for channelz pagination.
In doing so, most nodes never need to hit a singleton global resource at all: the most they do is take a sharded lock and do a list insert/removal pair.
(it turns out this code is a major source of contention in gRPC)
Closes#39306
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39306 from ctiller:counting-on-it a7a04c33a6818f6be5c211477a19798ffe78bf18
PiperOrigin-RevId: 750342301
Sketched out an approach to customizable write metrics we discussed last week
In a nutshell:
- endpoints can advertise a set of metrics they provide (in our discussions we used a Span here, I realized during implementation I'd like wrapped endpoints to be able to extend this set, and so using a vector instead)
- endpoints also supply name and id queries for said metrics
- users of the api can request a set of events to callback on, and a set of metrics they're interested in, and a callback will be made when those events are ready with the set of metrics requested
PiperOrigin-RevId: 748559193
<!--
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.
-->
Closes#39252
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39252 from ctiller:secure-cg 93dc2f6d0e57ed359798d9572e289b7563bb1b50
PiperOrigin-RevId: 748530614
Now that we have this, use it wherever it makes sense to reduce per-channel memory usage.
Closes#39254
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39254 from ctiller:bitgen 3622ca0d99a62d93caef0f9cd952675e75d7dc7f
PiperOrigin-RevId: 747960932
We'll need this type for telemetry for all transports.
It's likely we need to move this again in a week or so, but for now this spot makes sense.
Closes#39213
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39213 from ctiller:rename 67a134cfbbc973d7046cc248f6e709e6eacd7230
PiperOrigin-RevId: 747724831
<!--
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.
-->
Closes#39189
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39189 from ctiller:http2-trace 547f78604124cc3005fbee6098487a2110afb926
PiperOrigin-RevId: 746174350
EventEngine based secure endpoint implementation.
There's several shortcuts here to get something up quickly:
* a "legacy" implementation is preserved in legacy_secure_endpoint.cc - this version is verbatim copied from current code, and is used whenever the experiment is disabled. Doing so makes this change relatively safe.
* The new implementation contains two variants that share their protection engines: one that wraps an old `grpc_endpoint`, another that wraps an `EventEngine::Endpoint`. The latter is what we'll converge on - and at that point significant implementation cleanup will be possible.
The three implementations together give us a safe deployment story, and one that's maximally orthogonal to other experiments rollout.
Closes#39197
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39197 from ctiller:SEC 8fc0fe631086d6a351a68bcd03f5bda70732044d
PiperOrigin-RevId: 745779620