From 07f53fbec0571cbb923bc3431a4bb9b012fcaf78 Mon Sep 17 00:00:00 2001
From: Christian Pointner <equinox@helsinki.at>
Date: Sat, 24 Sep 2016 01:39:29 +0200
Subject: fixed server selection


diff --git a/src/rhctl/switch_control.go b/src/rhctl/switch_control.go
index 6ee8527..043d682 100644
--- a/src/rhctl/switch_control.go
+++ b/src/rhctl/switch_control.go
@@ -210,23 +210,14 @@ func (ctrl *SwitchControl) checkAndSelectServer(server string) bool {
 	return false
 }
 
-func (ctrl *SwitchControl) selectNextValidServer(preferred string) {
-	if preferred != "" {
-		if ctrl.checkAndSelectServer(preferred) {
-			ctrl.state.Mood = MoodNervous
-			rhl.Printf("SwitchCTRL: switched to preferred server '%s' -> now in mood: %s", preferred, ctrl.state.Mood)
-			return
-		}
-		rhl.Printf("SwitchCTRL: preferred server '%s' is not selectable, keeping on searching...", preferred)
-	}
-
+func (ctrl *SwitchControl) selectNextValidServer() {
 	for name, state := range ctrl.state.Server {
 		if state.Health == ServerAlive && state.Channel != "" {
 			if !ctrl.selectServer(name) {
 				continue
 			}
 			ctrl.state.Mood = MoodNervous
-			rhl.Printf("SwitchCTRL: found another valid server '%s' -> now in mood: %s", preferred, ctrl.state.Mood)
+			rhl.Printf("SwitchCTRL: found another valid server '%s' -> now in mood: %s", name, ctrl.state.Mood)
 			return
 		}
 	}
@@ -265,14 +256,22 @@ func (ctrl *SwitchControl) reconcile(requestedServer string) (result bool) {
 	s, exists := ctrl.state.Server[swsrv]
 	if !exists || s.Health != ServerAlive || s.Channel == "" {
 		rhl.Printf("SwitchCTRL: server '%s' is unknown, dead or has invalid channel!", swsrv)
-		ctrl.selectNextValidServer(requestedServer)
+		if requestedServer != "" {
+			if ctrl.checkAndSelectServer(requestedServer) {
+				rhl.Printf("SwitchCTRL: switching to requested server '%s' ...", requestedServer)
+				return true
+			}
+			rhl.Printf("SwitchCTRL: requested server '%s' is not selectable, ignoring request", requestedServer)
+		}
+		ctrl.selectNextValidServer()
 		return
 	}
 	ctrl.state.ActiveServer = swsrv
 
-	if ctrl.state.ActiveServer != requestedServer {
+	if requestedServer != "" && ctrl.state.ActiveServer != requestedServer {
 		if ctrl.checkAndSelectServer(requestedServer) {
 			rhl.Printf("SwitchCTRL: switching to requested server '%s' ...", requestedServer)
+			result = true
 		} else {
 			rhl.Printf("SwitchCTRL: requested server '%s' is not selectable, ignoring request", requestedServer)
 		}
@@ -282,7 +281,7 @@ func (ctrl *SwitchControl) reconcile(requestedServer string) (result bool) {
 			ctrl.state.Mood = MoodNervous
 			rhl.Printf("SwitchCTRL: switch and server channel mismatch: '%s' != '%s' -> now in mood: %s", swch, s.Channel, ctrl.state.Mood)
 			if !ctrl.selectServer(ctrl.state.ActiveServer) {
-				ctrl.selectNextValidServer("")
+				ctrl.selectNextValidServer()
 			}
 			return
 		}
-- 
cgit v0.10.2