This change introduces a new experiment `call_tracer_send_initial_metadata_is_an_annotation`. When enabled, the `CallTracer::RecordSendInitialMetadata` method will now record a `SendInitialMetadataAnnotation` and call a new `MutateSendInitialMetadata` method on the underlying `CallTracerInterface`.
The `CallTracerInterface` and its implementations (including XorMetrics, OpenCensus, OpenTelemetry, and test fakes) have been updated to include the new `MutateSendInitialMetadata` virtual method. The existing `RecordSendInitialMetadata` implementations are modified to check the experiment flag and delegate to `MutateSendInitialMetadata` if the experiment is active.
A new `SendInitialMetadataAnnotation` class is added, which inherits from `CallTracerAnnotationInterface::Annotation`. This annotation type is used to capture the state of the initial metadata for immutable tracing purposes.
Additionally, `ForEachKeyValue` methods are added to `MetadataInfo` and `HttpAnnotation` to facilitate iterating over metadata key-value pairs for annotation recording. The experiment configuration files are updated to include the new experiment.
PiperOrigin-RevId: 854227812
This temporarily disables the bzlmod version consistency check, because the new version of the xDS protos winds up pulling in a lot of upgraded dependencies that will take some work to get working.
Closes#41242
PiperOrigin-RevId: 852345420
Change was **not** created by the release automation script, because it doesn't handle a +2 version bump. See go/grpc-release
Closes#41291
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41291 from murgatroid99:v1.79.0-dev_bump 9a9bf54e5a891459390792dc9d547bdc17b7dd4d
PiperOrigin-RevId: 848168598
# Root cause
* gRPC AIO creates a Unix domain socket pair, and the current thread passes the read socket to the event loop for reading, while the write socket is passed to a thread for polling events and writing a byte into the socket.
* However, during the shutdown process, the event loop stops reading the read socket without closing it before the polling thread receives the final event to exit the thread.
* The shutdown process will hang if (1) the event loop stops reading the read socket before the polling thread receives the final event to exit the thread, and (2) the polling process stuck at `write` syscall.
* The `write` syscall may get stuck at [sock_alloc_send_pskb](https://elixir.bootlin.com/linux/v5.15/source/net/core/sock.c#L2463) when there is not enough socket buffer space for the write socket. Hence, the polling thread hangs at write and cannot continue to the next iteration to retrieve the final event. As a result, the event loop no longer reads the read socket, so the allocable buffer size for the write socket does not increase any longer. Therefore, the current thread hangs when waiting for the polling thread to `join()`.
* `asyncio` will shutdown the default executor (`ThreadPoolExecutor`) when `asyncio.run(...)` finishes. Hence, it hangs because some threads can't join.
# Reproduction
* Step 0: Reduce the socket buffer size to increase the probability to reproduce the issue.
```sh
sysctl -w net.core.rmem_default=8192
sysctl -w net.core.rmem_default=8192
```
* Step 1: Manually update `unistd.write(fd, b'1', 1)` to `unistd.write(fd, b'1' * 4096, 4096)`. The goal is to make write (4096 bytes per write) faster than read (1 byte per read), thereby filling the write buffer nearly full.
8e67cb088d/src/python/grpcio/grpc/_cython/_cygrpc/aio/completion_queue.pyx.pxi (L31)
* Step 2: Create an `aio.insecure_channel` and use it to send 100 requests with at most 10 in-flight requests. After all requests finish, the shutdown process will be triggered, and it's highly likely to hang if you follow Steps 0 and 1 correctly. In my case, my reproduction script reproduces the issue 10 out of 10 times.
* Step 3: If it hangs, check the following information:
* `ss -xpnm state connected | grep $PID` => You will find there are two sockets that belong to the same socket pair, and one has non-zero bytes in the read buffer while the other has non-zero bytes in the write buffer. In addition, write buffer should be close to `net.core.rmem_default`.
* Check the stack of the `_poller_thread` by running `cat /proc/$PID/task/$TID/stack`. The thread is stuck at `sock_alloc_send_pskb` because there is not enough buffer space to finish the `write` syscall.
* Use GDB to find the `_poller_thread` and make sure it's stuck at `write()`, then print its `$rdi` to confirm that the FD is the one with a non-zero write buffer in the socket.
# Test
Follow Steps 0, 1, and 2 in the 'Reproduction' section with this PR. It doesn't hang in 10 out of 10 cases.
<!--
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#40989
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40989 from kevin85421:asyncio-hang ff74508a2c29e7c71dfe88365d1178f901d69787
PiperOrigin-RevId: 846425459
Allow servers to set max outstanding streams limit per server. This pull request only adds the BUILD changes required for this. The core logic will follow in a later PR.
Closes#41076
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41076 from siddharthnohria:max_outstanding_streams 392d962fc78be66c075952977bc3a28f2298b7ce
PiperOrigin-RevId: 833196338
This refactors the call buffering code for the v1 stack, which avoids some repetition between the resolver queue and the LB pick queue. This code will also be used in the future in the subchannel as part of implementing the MAX_CONCURRENT_STREAMS design.
As part of this, I also eliminated the subclassing in the v1 client channel implementation, which has not been necessary since the v2 code was removed.
Closes#40945
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40945 from markdroth:call_buffer_v1_refactoring 0a471be6ed862c3cc3225644fb2a3e1456e60fbf
PiperOrigin-RevId: 829566551
Log error details when `ExecuteBatchError` occurs. The error is logged with DEBUG severity level. Message example:
> `Failed to receive any message from Core: Failed grpc_call_start_batch: 8 with grpc_call_error value: 'GRPC_CALL_ERROR_TOO_MANY_OPERATIONS`
Closes#40921
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40921 from chandra-siri:log_exception_details 316de3dae2f1935051e4358d793ee14f727505fd
PiperOrigin-RevId: 823347363
This PR updates the minimum version of `setuptools` package required across different Python setup files to v77.0.1. This version contains Python 3.14 support as well as deprecates a format for defining project license in `pyproject.toml` files ([Reference](https://setuptools.pypa.io/en/stable/history.html#id71)) which is a prerequisite for #40833Closes#40931
PiperOrigin-RevId: 823008815
This change modifies `grpc_core::CollectionScope` to accept a vector of parent scopes instead of a single parent. This allows a single scope to aggregate its metrics into multiple parent scopes. Consequently, the special `GetGlobalCollectionScope` function and its associated global state are removed, as a root scope can now be created using `CreateCollectionScope({}, {})`.
PiperOrigin-RevId: 822316366
https://github.com/grpc/grpc/pull/40851 Introduced a change with mandatory parameters for `CreateCollectionScope()`.
While gRPC Python observability doesn't use it for functionality, it is invoked in `observability_util.cc` to force linking the instrument package and avoid build errors.
The change in #40851 to include has started causing Python tests to fail with the following error:
```
grpc_observability/observability_util.cc:98:36: error: too few arguments to function ‘grpc_core::RefCountedPtr grpc_core::CreateCollectionScope(grpc_core::RefCountedPtr, absl::lts_20250512::Span >, size_t, size_t)’
98 | grpc_core::CreateCollectionScope(); // Forces linking of instrument library
| ^
In file included from grpc_root/src/core/lib/resource_quota/telemetry.h:18,
from grpc_root/src/core/lib/resource_quota/memory_quota.h:44,
from grpc_root/src/core/lib/resource_quota/arena.h:39,
from grpc_root/src/core/lib/promise/arena_promise.h:29,
from grpc_root/src/core/lib/channel/channel_stack.h:58,
from grpc_observability/python_observability_context.h:33,
from grpc_observability/observability_util.h:31,
from grpc_observability/observability_util.cc:15:
```
This PR hence adds empty parameters to fix the breakage.
Closes#40909
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40909 from sreenithi:fix_observability_40851_breakage 4b9b7b23cfde3c97b5eef7cebeb5f81ce29d2402
PiperOrigin-RevId: 819690667
gRPC is currently getting formatted with two different clang-format implementations, and due to some weirdness they have different include file orderings. This change introduces clang-format configuration to ensure that the two systems align - it's *highly* expected that this will need some maintenance going forward as the two systems evolve.
Closes#40905
PiperOrigin-RevId: 819606209
Some CI jobs is still running it with Python 3.8
Closes#40898
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40898 from sergiitk:fix/ci/py-o11y ecd146a7454f490cac1ae9229c92ed4d059fd0d3
PiperOrigin-RevId: 818787222
This change include:
1. Restore changes from https://github.com/grpc/grpc/pull/40652
2. Fix for UPB library dependencies for o11y module in Python
<!--
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#40789
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40789 from Zgoda91:python_o11y_lib_deps_fix 2bad9b6f61579c0fdaa3b405b727bf77d58e64ec
PiperOrigin-RevId: 817980787
### Description
## Part 15 of Introducing Ruff
* In this PR - the suppression for `TRY002` and `TRY004` has been removed on the root `ruff.toml`
## Related:
* Prev: #40189
* b/423755915
Closes#40190
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40190 from asheshvidyut:feature/setup-ruff-part-15 9e1c4c2712a052e5c5e38f415df8ec5e5d398a2e
PiperOrigin-RevId: 817159922
### Description
## Part 14 of Introducing Ruff
* In this PR - the suppression for `SIM103`, `SIM108`, `SIM114`, `SIM115`, `SIM117`, `SIM118`, `SIM300`, `T210`, `TC003`, `TD004` and `TD005` has been removed on the root `ruff.toml`
## Related:
* Next: #40190
* Prev: #40188
* b/423755915
Closes#40189
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40189 from asheshvidyut:feature/setup-ruff-part-14 39b25d291bed497322666129b7e96ec18846c35e
PiperOrigin-RevId: 816636222
### Description
## Part 13 of Introducing Ruff
* In this PR - the suppression for `S311`, `S603` and `SIM102` has been removed on the root `ruff.toml`
## Related:
* Next: #40189
* Prev: #40187
* b/423755915
Closes#40188
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40188 from asheshvidyut:feature/setup-ruff-part-13 76f21dc6006b14ed6e611904868eb78a0c55d325
PiperOrigin-RevId: 816589294
### Description
## Part 12 of Introducing Ruff
* In this PR - the suppression for `RUF013`, `RUF022`, `RUF023`, `S301` has been removed on the root `ruff.toml`
## Related:
* Next: #40188
* Prev: #40186
* b/423755915
Closes#40187
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40187 from asheshvidyut:feature/setup-ruff-part-12 c9120f9e979a7f60a487504b60cd8d91fbdf7123
PiperOrigin-RevId: 814551463
### Description
## Part 11 of Introducing Ruff
* In this PR - the suppression for `RET506` and `RET507` has been removed on the root `ruff.toml`
## Related:
* Next: #40187
* Prev: #40185
* b/423755915
Closes#40186
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40186 from asheshvidyut:feature/setup-ruff-part-11 16a0cb463a1fb11a0e940e6116e1daf8965cf7ce
PiperOrigin-RevId: 813056941
Change was created by the release automation script. See go/grpc-release.
Closes#40796
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40796 from sergiitk:bump_dev_version_202509291139 e7aa910253d1706a72822da986b8b8e7bc87931d
PiperOrigin-RevId: 812961524
A minor fix.
Python `_fork_interop_test` was logging out `waitstatus` instead of the exit code.
> [`os.wait()`](https://docs.python.org/3.9/library/os.html#os.wait) \
> Wait for completion of a child process, and return a tuple containing its pid and exit status indication: a 16-bit number, whose low byte is the signal number that killed the process, and whose high byte is the exit status (if the signal number is zero); the high bit of the low byte is set if a core file was produced.
>
> [`waitstatus_to_exitcode()`](https://docs.python.org/3.9/library/os.html#os.waitstatus_to_exitcode) can be used to convert the exit status into an exit code.
This PR:
- Logs exit code and the wait status, with a clear distinction what's what.
- Configures log format to be absl-like, just but prefixes thread id with the pid (which is more relevant in our case).
Closes#40740
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40740 from sergiitk:py/test/fork/exit-code 04951ba96c435f710bdfc8c3bd6605ff0fdf8f4e
PiperOrigin-RevId: 811856945
### Description
## Part 10 of Introducing Ruff
* In this PR - the suppression for `RET505` has been removed on the root `ruff.toml`
## Related:
* Next: #40186
* Prev: #40184
* b/423755915
Closes#40185
PiperOrigin-RevId: 810694059
### Description
## Part 8 of Introducing Ruff
* In this PR - the suppression for `PLR1714` and `PLR5501` and has been removed on the root `ruff.toml`
## Related:
* Next: #40184
* Prev: #40182
* b/423755915
Closes#40183
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40183 from asheshvidyut:feature/setup-ruff-part-8 af5f5967d96c9e82d280bd66744bcf1ae972e7ec
PiperOrigin-RevId: 810411168
### Description
## Part 7 of Introducing Ruff
* In this PR - the suppression for `N806`, `PERF102`, `PIE796`, `PERF401`, `PLC0206`, `PYI032`, `PYI045`, `PYI056`, `PLE0604`, `PLR0911`, `PLR0915`, `PLR1704` and `PLR1711` and has been removed on the root `ruff.toml`
## Related:
* Next: #40183
* Prev: #40181
* b/423755915
Closes#40182
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40182 from asheshvidyut:feature/setup-ruff-part-7 ead903f59f22c9b207a4afd0d043a796464f1322
PiperOrigin-RevId: 810376538
### Description
## Part 9 of Introducing Ruff
* In this PR - the suppression for `PLW0120`, `PLW0603`, `PLW1508`, `PLW1641`, `PT009`, and `PTH123` has been removed on the root `ruff.toml`
## Related:
* Next: #40185
* Prev: #40183
* b/423755915
Closes#40184
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40184 from asheshvidyut:feature/setup-ruff-part-9 ea6648bd71d0e9e5af7db3e06c6e3f85c6f5a35c
PiperOrigin-RevId: 810316723
Add Stream quota, to allow users to set server wide max_outstanding_streams, in addition to the per-connection limit.
Closes#39125
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39125 from siddharthnohria:max_outstanding_streams 32ae21514d5321a76b41b8445d16753a095914f8
PiperOrigin-RevId: 807985441
See `grpc_check.h`. This code redefines the abseil `CHECK*` macros using custom gRPC macros when building tests. In `bazel test ...` builds, on check failure, `PostMortemEmit()` will dump state to the log before crashing.
Caveat: to prevent circular dependencies, code that `postmortem` relies on cannot use the custom gRPC CHECK macros. This is not much code, ~50 source files. grep for the `absl/log:check` bazel dependency.
Closes#39945
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/39945 from drfloob:grpc_check ca8e46718f2021e0df79aa67a3a0b0c751b3ce44
PiperOrigin-RevId: 807452496
Introduce a centralized Resource Tracking mechanism in gRPC core, to provide a centralized way to access job-level resources.
There are multiple features in gRPC which can benefit from having better visibility into the job-level resource usage.
* Debuggability: Knowing that the Client / Server was experiencing high CPU usage at the time of some request can serve as a valuable insight for debugging poor latencies / failures.
* Load Shedding: gRPC’s ResourceQuota currently depends upon users defining limits, and only track gRPC channel-level usage. Configuring this can be difficult at times, especially if the application level usage for different requests varies significantly. In addition, visibility into Container memory usage can allow us to enable ResourceQuota by default in the future.
Closes#40698
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40698 from siddharthnohria:container-memory b058a0ed7ef801fdd0be2bfc04e1a481f0908a5d
PiperOrigin-RevId: 807142322
This change adds `MetricsDomainNode` and `MetricsDomainStorageNode` to channelz. `QueryableDomain` and `DomainStorage` now inherit from `channelz::DataSource`, exposing domain metadata, labels, and metric values through channelz.
PiperOrigin-RevId: 806081893
This reverts PR #40481#40481 was work in progress and doesn't fix the mentioned observability test yet. It was wrongly submitted due to an earlier approval.
Closes#40662
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40662 from sreenithi:revert_wrong_commit bc8f55c2ed6c5fb8220f37827a43bb83a7d6511d
PiperOrigin-RevId: 805405106
#40417 has caused the Python Basic Tests job to fail continuously since this morning with the error
```
from grpc_observability import _open_telemetry_observability
File "/var/local/git/grpc/py39/lib/python3.9/site-packages/grpc_observability/_open_telemetry_observability.py", line 23, in <module>
from grpc_observability import _cyobservability
ImportError: /var/local/git/grpc/py39/lib/python3.9/site-packages/grpc_observability/_[cyobservability.cpython-39-x86_64-linux-gnu.so](https://www.google.com/url?q=http://cyobservability.cpython-39-x86_64-linux-gnu.so&sa=D): undefined symbol: _ZN9grpc_core17instrument_detail15QueryableDomain19AllocateDoubleGaugeESt17basic_string_viewIcSt11char_traitsIcEES5_S5_
```
This PR fixes it by adding the required dependency in grpcio-python-observability.
Passing Basic Tests Run using this fix:
https://btx.cloud.google.com/invocations/239da2ca-1394-42f7-aa5c-ac63b938b200/targetsCloses#40481
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40481 from sreenithi:fix_basic_test_breakage 124d6da56ccca7eae92a64d911ab6eb31f05175f
PiperOrigin-RevId: 805276991
This PR changes the logic of `shutdown_grpc_aio` to skip `_actual_aio_shutdown` python interpreter is already [being finalized](https://docs.python.org/3.14/glossary.html#term-interpreter-shutdown) (cleaning up resources, destroying objects, preparing for program exit, etc). `_actual_aio_shutdown` involves `PollerCompletionQueue` shutdown, followed by core [`grpc_shutdown`](https://grpc.github.io/grpc/core/grpc_8h.html#a35f55253e80714c17f4f3a0657e06f1b) API call.
Reasoning:
1. During finalizations, in come cases resources we're accessing may already be freed, and the order is not deterministic. Some of the resources being unloaded prior the `_actual_aio_shutdown` call: `_global_aio_state`, `AsyncIOEngine` enum, or even python libraries like `sys`. This leads to errors like `AttributeError: 'NoneType' object has no attribute 'POLLER'`.
2. `PollerCompletionQueue.shutdown()` will try to wait on its poller thread to finish gracefully. In py3.14, `PythonFinalizationError` is raised when `Thread.join()` is called during finalization. I think the logic here is similar to (1): these threads may have already been deallocated.
Note that in some cases users were able to prevent `_actual_aio_shutdown` from being called by manually calling `init_grpc_aio` prior to initializing any grpc objects. This resulted in an incorrect positive refcount, which prevents `_actual_aio_shutdown` from being run. Before the above finalization check was added this side-effect was sometimes misused to avoid deadlock on finialization (#22365).
This PR:
- Fixes#39520
- Fixes#22365
- Fixes#38679
- Fixes#33342
- Fixes#36655Closes#40447
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40447 from sergiitk:fix/aio/shutdown 11114f6feffd7380e9fde56e7581eb19cf001597
PiperOrigin-RevId: 804971756
This commit introduces the `event_engine_poller_for_python` experiment, allowing for controlled rollout and testing of the EventEngine's Posix poller specifically within gRPC Python bindings.
**Crucially, this change does *not* alter the default behavior for builds where `GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER` is *not* defined.** In such configurations, the Posix EventEngine poller will continue to be enabled unconditionally, preserving existing functionality.
The primary impact of this change is when `GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER` *is* defined (e.g., in gRPC Python's build system). In this scenario, the enablement of the Posix poller transitions from being implicitly disabled to being configurable via the `event_engine_poller_for_python` experiment flag. This enables a controlled, experimental rollout of the EventEngine poller in environments that previously opted out of its direct instantiation.
Closes#40243
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40243 from eugeneo:python-no-backup-poller-experiment 17906e6501b8e6fe7d2ccc63439ec121ef47d43b
PiperOrigin-RevId: 804472655
This PR enables Python 3.14 in all the different tests - Basic tests (Native Python tests), Bazel tests and Distrib tests to build Python 3.14 artifacts. In addition, it also updates all the public facing METADATA versions.
## Distribtests
Required pre-requisite changes to enable 3.14 artifacts are covered in #40289 .
## Bazel tests
Enabling Python 3.14 required updating the rules_python version to a more recent version that supports 3.14. This was done in #40602
## Basic tests
The following errors were caught by the Basic tests when running via Python 3.14 and resolved in this PR:
### 1) No running event loop for AsyncIO when run outside an async function
```
Traceback (most recent call last):
File "src/python/grpcio/grpc/_cython/_cygrpc/aio/common.pyx.pxi", line 184, in grpc._cython.cygrpc.get_working_loop
RuntimeError: no running event loop
```
This was caught by the `tests_aio.unit.outside_init_test.TestOutsideInit` and `tests_aio.unit.init_test.TestInit` tests, and was also previously reported in #39507 with the root cause.
Following some investigation, the fix is being worked on by @sergiitk in PR #40293. In order to parallelize the fix and this PR, these 2 tests are currently being skipped for Python 3.14 and above.
### 2) Pickling error from the `multiprocessing` library
```
_pickle.PicklingError: Can't pickle <function _test_well_known_types at 0x7f3937eee610>: it's not the same object as tests.unit._dynamic_stubs_test._test_well_known_types
when serializing dict item '_target'
when serializing multiprocessing.context.Process state
when serializing multiprocessing.context.Process object
```
This was caught by the `tests.unit._dynamic_stubs_test.DynamicStubTest` which runs test cases in a subprocess using the `multiprocessing` library.
Error root cause:
- The default start method of multiprocessing in linux has changed to `forkserver` instead of `fork` from Python 3.14.
- `forkserver` has a few extra restrictions for picklability as compared to `fork` (Ref: [Python Docs](https://docs.python.org/3.14/library/multiprocessing.html#the-spawn-and-forkserver-start-methods))
- All the [test case functions](0243842d5d/src/python/grpcio_tests/tests/unit/_dynamic_stubs_test.py (L115)) in the DynamicStubTest that are provided as `target` to the `multiprocessing.Process` use decorators. This causes problems when pickling them.
Hence to resolve this, we manually set the 'start method' of `multiprocessing` to use the `fork` start method.
Closes#40403
PiperOrigin-RevId: 804290760
Roll forward of a prior change, this change includes fixes and also memory reclamation support for orphaned domain storage.
PiperOrigin-RevId: 802204833
As title
Closes#40484
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40484 from apolcyn:bump_dev_version_202508191952 e788be57e9dc7f5e8316bee4baadec26fba3f6e6
PiperOrigin-RevId: 798331971
This change introduces a new `ResourceQuotaDomain` and registers Resource Quota related counters (`rq_calls_dropped`, `rq_calls_rejected`, `rq_connections_dropped`) within this domain. Each `MemoryQuota` now holds a reference to a `ResourceQuotaDomain` Storage instance, allowing these metrics to be tracked per resource quota. The usage sites in `chttp2_transport.cc` and `parsing.cc` are updated to use the new per-quota telemetry storage. The old global stats definitions for these counters are removed.
Introduce gauges also, and use them to report current memory pressure.
PiperOrigin-RevId: 796613444