# rpc error: code = Canceled desc = context canceled

- **ID:** `go/grpc-stream-canceled-by-client`
- **Domain:** go
- **Category:** network_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

The caller's context was canceled (client timeout, user request abort, or upstream context propagation) before the RPC returned.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 1.40+ | active | — | — |

## Workarounds

1. **** (85% success)
   ```
   Create a fresh context for retries with a bounded deadline:
retryCtx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
resp, err := client.Do(retryCtx, req)
   ```
2. **** (90% success)
   ```
   On the server, honor ctx.Done() and clean up resources:
<-ctx.Done()
// release DB conn, cancel downstream calls
   ```

## Dead Ends

- **** — A canceled context stays canceled; the retry fails immediately. (95% fail)
- **** — Masks upstream cancellation and can leak goroutines / leave server resources allocated. (70% fail)
