code: func (r *Router) FailServer(areaID types.AreaID, s *metadata.Server) error {
  	r.RLock()
  	defer r.RUnlock()
  
  	area, ok := r.areas[areaID]
  	if !ok {
  		return fmt.Errorf("area ID %q does not exist", areaID)
  	}
  
  	// If the manager has already been removed we just quietly exit. This
  	// can get called by Serf events, so the timing isn't totally
  	// deterministic.
  	info, ok := area.managers[s.Datacenter]
  	if !ok {
  		return nil
  	}
  
  	info.manager.NotifyFailedServer(s)
  	return nil
  }
docs: // FailServer should be called whenever a server is failed in an area. This
  // is typically hooked into the Serf event handler area for this area. We will
  // immediately shift traffic away from this server, but it will remain in the
  // list of servers.