• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

grpc / grpc-java / #20175
89%

Build:
DEFAULT BRANCH: master
Ran 20 Feb 2026 07:49AM UTC
Jobs 1
Files 630
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

20 Feb 2026 07:37AM UTC coverage: 88.707% (+0.001%) from 88.706%
#20175

push

github

web-flow
unwrap ForwardingSubchannel during Picks (#12658)

This PR ensures that Load Balancing (LB) policies unwrap
`ForwardingSubchannel` instances before returning them in a
`PickResult`.

**Rationale:** Currently, the identity of a subchannel is "awkward"
because decorators break object identity. This forces the core channel
to use internal workarounds like `getInternalSubchannel()` to find the
underlying implementation. Removing these wrappers during the pick
process is a critical prerequisite for deleting Subchannel Attributes.

By enforcing unwrapping, `ManagedChannelImpl` can rely on the fact that
a returned subchannel is the same instance it originally created. This
allows the channel to use strongly-typed fields for state management
(via "blind casting") rather than abusing attributes to re-discover
information that should already be known. This also paves the way for
the eventual removal of the `getInternalSubchannel()` internal API.

**New APIs:** To ensure we don't "drop data on the floor" during the
unwrapping process, this PR adds two new non-static APIs to PickResult:
- copyWithSubchannel()
- copyWithStreamTracerFactory()

Unlike static factory methods, these instance methods follow a
"copy-and-update" pattern that preserves all existing pick-level
metadata (such as authority overrides or drop status) while only
swapping the specific field required.

35450 of 39963 relevant lines covered (88.71%)

0.89 hits per line

Uncovered Existing Lines

Lines Coverage ∆ File
1
93.21
-0.14% ../okhttp/src/main/java/io/grpc/okhttp/OkHttpClientTransport.java
1
97.35
-0.88% ../okhttp/src/main/java/io/grpc/okhttp/OkHttpServerStream.java
3
98.48
0.01% ../xds/src/main/java/io/grpc/xds/WeightedRoundRobinLoadBalancer.java
8
72.41
-6.9% ../servlet/src/main/java/io/grpc/servlet/ServletServerStream.java
9
96.83
0.02% ../util/src/main/java/io/grpc/util/OutlierDetectionLoadBalancer.java
10
95.0
0.26% ../xds/src/main/java/io/grpc/xds/orca/OrcaOobUtil.java
11
95.28
0.19% ../xds/src/main/java/io/grpc/xds/ClusterImplLoadBalancer.java
22
89.15
0.04% ../services/src/main/java/io/grpc/protobuf/services/HealthCheckingLoadBalancerFactory.java
32
79.65
0.18% ../api/src/main/java/io/grpc/LoadBalancer.java
Jobs
ID Job ID Ran Files Coverage
1 #20175.1 20 Feb 2026 07:49AM UTC 630
88.71
Source Files on build #20175
  • Tree
  • List 630
  • Changed 12
  • Source Changed 0
  • Coverage Changed 12
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #20175
  • eae16b25 on github
  • Prev Build on master
  • Next Build on master
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc