diff --git a/nomad/client_agent_endpoint.go b/nomad/client_agent_endpoint.go index 3f6dd4cd13f4..dd38830d2c75 100644 --- a/nomad/client_agent_endpoint.go +++ b/nomad/client_agent_endpoint.go @@ -159,7 +159,7 @@ func (a *Agent) monitor(conn io.ReadWriteCloser) { args.SetForwarded() } - // Handle serverID not equal to ours including region forwarding + // Try to forward request to remote region/server if args.ServerID != "" { serverToFwd, err := a.forwardFor(args.ServerID, region) if err != nil { diff --git a/nomad/rpc.go b/nomad/rpc.go index ee70f276628d..228157d4cc5b 100644 --- a/nomad/rpc.go +++ b/nomad/rpc.go @@ -531,21 +531,22 @@ func (r *rpcHandler) forwardRegion(region, method string, args interface{}, repl func (r *rpcHandler) getServer(region, serverID string) (*serverParts, error) { // Bail if we can't find any servers r.peerLock.RLock() + defer r.peerLock.RUnlock() + servers := r.peers[region] if len(servers) == 0 { - r.peerLock.RUnlock() r.logger.Warn("no path found to region", "region", region) return nil, structs.ErrNoRegionPath } - // Lookup server by id or namedoes not exist in requested regiont + // Lookup server by id or name for _, server := range servers { if server.Name == serverID || server.ID == serverID { return server, nil } } - return nil, fmt.Errorf("unknown nomad server %s", serverID) + return nil, fmt.Errorf("unknown Nomad server %s", serverID) } // streamingRpc creates a connection to the given server and conducts the