63 lines
3.2 KiB
Markdown
63 lines
3.2 KiB
Markdown
# gRPC advanced capability support matrix
|
|
|
|
Every capability in `:grpc-advanced:*`, its grade, and what it would take to raise it.
|
|
`GrpcAdvancedSupportMatrix` is the machine-readable form; `GrpcAdvancedCapability.defaultGrade`
|
|
carries the same values.
|
|
|
|
All capabilities are off by default. Flags are `ca-skeleton.grpc.advanced.<capability>.enabled`.
|
|
|
|
## Grades
|
|
|
|
| Grade | May start | Production needs a separate approval |
|
|
| --- | --- | --- |
|
|
| `ADVANCED_STABLE` | Yes | No |
|
|
| `EXPERIMENTAL` | Yes | Yes |
|
|
| `WATCH` | No | — |
|
|
| `DISABLED` | No | — |
|
|
|
|
## Capabilities
|
|
|
|
| Capability | Flag | Grade | Real infrastructure its evidence needs |
|
|
| --- | --- | --- | --- |
|
|
| Protobuf Edition 2024 | `edition-2024` | `ADVANCED_STABLE` | — |
|
|
| Protobuf Edition 2026 | `edition-2026` | `WATCH` | — |
|
|
| Client streaming | `client-streaming` | `ADVANCED_STABLE` | — |
|
|
| Bidirectional streaming | `bidi-streaming` | `ADVANCED_STABLE` | — |
|
|
| Manual flow control | `manual-flow-control` | `ADVANCED_STABLE` | — |
|
|
| Read-only unary hedging | `hedging` | `EXPERIMENTAL` | — |
|
|
| Custom name resolver | `custom-resolver` | `ADVANCED_STABLE` | — |
|
|
| Custom load balancer | `custom-load-balancer` | `EXPERIMENTAL` | — |
|
|
| Proxyless xDS | `xds` | `EXPERIMENTAL` | xDS control plane |
|
|
| gRPC-Web | `grpc-web` | `ADVANCED_STABLE` | gRPC-Web proxy |
|
|
| Servlet HTTP/2 | `servlet-compat` | `ADVANCED_STABLE` | Servlet container |
|
|
| Spring Integration bridge | `integration-bridge` | `ADVANCED_STABLE` | — |
|
|
| Reactor adapter | `reactor` | `ADVANCED_STABLE` | — |
|
|
| Kotlin coroutine / Flow | `kotlin` | `ADVANCED_STABLE` | Kotlin toolchain |
|
|
| Channelz / CSDS diagnostics | `channel-diagnostics` | `ADVANCED_STABLE` | — |
|
|
|
|
## What the grades mean here, concretely
|
|
|
|
**Grade is a statement about the contract, not about a deployment.** Every capability's contract is
|
|
implemented and tested in this repository. What no capability has is evidence from a real deployment:
|
|
`GrpcAdvancedPromotionEvidence` for each one is empty, and no promotion has been granted.
|
|
|
|
**Four capabilities cannot produce meaningful evidence here at all**, because the infrastructure they
|
|
need is absent. `GrpcAdvancedInfrastructureTestkit.missingInfrastructure` names them, and a suite that
|
|
runs without its infrastructure passes and establishes nothing.
|
|
|
|
**Kotlin is the sharpest case.** This repository has no Kotlin toolchain, so
|
|
`GrpcKotlinCompatibilityGate.supportableHere()` returns false and always will until one exists. The
|
|
four contract requirements — one schema source shared with Java, coroutine cancellation propagated,
|
|
Flow backpressure inside the Stable buffer bounds, platform evidence types preserved — are checkable
|
|
without a toolchain and are checked. The compile lane is not.
|
|
|
|
## Promotion thresholds
|
|
|
|
| To | Soak | Also required |
|
|
| --- | --- | --- |
|
|
| `ADVANCED_STABLE` | 7 days | compatibility evidence, security review, fault evidence, performance evidence, ADR, runbook, real-environment test |
|
|
| Stable default | 30 days | all of the above, plus a dependency, security and operational-cost review |
|
|
|
|
`WATCH` becomes `EXPERIMENTAL` before anything else. Promotions are independent: promoting one
|
|
capability changes no other's grade.
|