377
}
378
379
>
func (rt *roundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
rpc.go
380
>
// Pick a frontend host at random.
381
>
members := rt.resolver.AvailableMembers()
382
>
if len(members) == 0 {
383
return nil, serviceerror.NewUnavailable("no frontend host to route request to")
384
}
385
>
idx := rand.Intn(len(members))
rpc.go
386
>
member := members[idx]
387
>
388
>
// Replace port with the HTTP port.
389
>
host, _, err := net.SplitHostPort(member.Identity())
390
>
if err != nil {
391
return nil, fmt.Errorf("failed to extract port from frontend member: %w", err)
392
}
393
>
address := fmt.Sprintf("%s:%d", host, rt.httpPort)
rpc.go
394
>
395
>
// Replace request's host.
396
>
req.URL.Host = address
397
>
req.Host = address
398
>
return rt.underlying.RoundTrip(req)
399
}
400