# rpc error: code = Unavailable desc = all SubConns are in TransientFailure

- **ID:** `go/grpc-unavailable-load-balancer`
- **Domain:** go
- **Category:** network_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

The gRPC client's load balancer cannot connect to any backend server because all endpoints are unreachable or failing health checks.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 1.21 | active | — | — |
| 1.22 | active | — | — |

## Workarounds

1. **Verify server health and restart any down instances.** (85% success)
   ```
   // Check server status via health check endpoint
healthClient := grpc_health_v1.NewHealthClient(conn)
resp, err := healthClient.Check(ctx, &grpc_health_v1.HealthCheckRequest{Service: "myservice.MyService"})
   ```
2. **Use a different load balancing policy like round_robin with proper service discovery.** (90% success)
   ```
   conn, _ := grpc.Dial("dns:///myservice:50051", grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`))
   ```

## Dead Ends

- **Recreating the client without changing server addresses.** — Same endpoints, same connectivity issue. (90% fail)
- **Setting a shorter dial timeout.** — Timeouts don't fix unreachable servers. (80% fail)
