# rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: error while dialing: dial tcp 10.0.0.1:8080: i/o timeout"

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

## Root Cause

All backend servers behind a load balancer are unreachable, often due to network partition or server crash.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 1.0 | active | — | — |
| 1.1 | active | — | — |

## Workarounds

1. **Check the health of all backend servers and ensure they are reachable.** (90% success)
   ```
   Use curl or telnet to test connectivity: telnet 10.0.0.1 8080, and check server logs.
   ```
2. **Implement a fallback to a different load balancer or DNS resolver.** (80% success)
   ```
   resolver := resolver.NewBuilder("dns:///example.com:8080")
conn, err := grpc.Dial("dns:///example.com:8080", grpc.WithInsecure(), grpc.WithResolvers(resolver))
   ```

## Dead Ends

- **Restart the client application.** — The client is fine; the issue is with the servers or network. (95% fail)
- **Increase the dial timeout to a very high value.** — If servers are down, longer timeout just delays the error. (80% fail)
