76 lines
3.5 KiB
Markdown
76 lines
3.5 KiB
Markdown
# gRPC platform support matrix
|
|
|
|
What the Stable gRPC platform (`:grpc:*`) is certified against, what it is only checked against, and
|
|
what is merely watched. The distinction is the point: "works with Spring Boot" is not a statement
|
|
anyone can act on.
|
|
|
|
`GrpcCompatibilityMatrix.caSkeleton()` is the machine-readable form of this table, and
|
|
`GrpcStableReleaseGate` blocks a release when a certified lane has no result or a failing one.
|
|
|
|
## Lanes
|
|
|
|
| Lane | Grade | Failure blocks a release |
|
|
| --- | --- | --- |
|
|
| Boot-managed platform (Spring Boot 4.0.8 BOM) | Certified | Yes |
|
|
| proto3 with explicit `optional` | Certified | Yes |
|
|
| `grpc-netty-shaded` | Certified | Yes |
|
|
| `grpc-netty` (unshaded) | Compatibility | No |
|
|
| Upstream gRPC Java version override | Compatibility | No |
|
|
| Protobuf Edition 2024 | Watch | No |
|
|
| Protobuf Edition 2026 | Watch | No |
|
|
|
|
## Runtime baseline
|
|
|
|
| | |
|
|
| --- | --- |
|
|
| Java | 21 |
|
|
| Spring Boot | 4.0.8 (the repository baseline; the plans assume 4.1) |
|
|
| io.grpc | `ext.grpcVersion` in `src/build.gradle` |
|
|
| Protobuf | `ext.protobufVersion` in `src/build.gradle` |
|
|
| Stable transport | Netty (shaded) |
|
|
| Stable RPC shapes | Unary, Server Streaming |
|
|
| Stable resolvers | Static, DNS, Unix domain socket |
|
|
| Stable load balancing | `pick_first`, `round_robin` |
|
|
|
|
## Evidence grades
|
|
|
|
A capability may only be advertised on evidence of a grade that can establish it.
|
|
`GrpcEvidenceGrade.requireCertifies` enforces this, and `GrpcReleaseEvidence.supports` refuses a
|
|
claim backed by the wrong lane.
|
|
|
|
| Grade | Lane | Establishes |
|
|
| --- | --- | --- |
|
|
| `CONTRACT` | `grpcInProcessContractTest` | adapter, interceptor order, status mapping, validation, idempotency replay, context propagation |
|
|
| `TRANSPORT` | `grpcNettyContractTest` | HTTP/2, TLS, mTLS, metadata limit, message limit, GOAWAY, keepalive, graceful shutdown |
|
|
| `FAULT` | `grpcFaultTest` | connection loss, completion unknown, partial stream, evidence classifier |
|
|
| `PERFORMANCE` | `grpcPerformanceTest` | latency, stream saturation, executor saturation, drain budget |
|
|
|
|
In-process results are never transport evidence. The in-process transport does not negotiate TLS,
|
|
does not frame HTTP/2 and does not enforce transport-level limits, so a suite that passes there has
|
|
tested the adapter and not the transport.
|
|
|
|
## What is not supported
|
|
|
|
| | Where it lives |
|
|
| --- | --- |
|
|
| Client streaming, bidirectional streaming | `grpc-advanced-streaming` |
|
|
| Manual flow control | `grpc-advanced-streaming` |
|
|
| Hedging | `grpc-advanced-resilience` |
|
|
| Custom name resolver, custom load balancer | `grpc-advanced-resilience` |
|
|
| xDS | `grpc-advanced-resilience` |
|
|
| gRPC-Web, Servlet HTTP/2, Spring Integration, Reactor, Kotlin | `grpc-advanced-compat` |
|
|
| Channelz / CSDS diagnostics | `grpc-advanced-diagnostics` |
|
|
|
|
## Current release status
|
|
|
|
Not released. Every `:grpc:*` leaf is `runtime_memberships: []` in the module registry, so the
|
|
platform is build-only: it compiles, its lanes run, and no deployed artifact carries it.
|
|
|
|
Two release gate inputs are outstanding and are the work between here and a release:
|
|
|
|
- **Performance baseline.** The performance lane runs and asserts shape — ordered percentiles, a gate
|
|
that reads them — rather than absolute numbers. A recorded baseline on a known runner is what turns
|
|
it into a regression gate.
|
|
- **Schema codegen.** No `protoc` runs in this build (ADR-GRPC-002), so the descriptor artifact and
|
|
the consumer-compile fixture are governed as policy rather than produced from a compiled schema.
|