protected void BringOffline(ServerConfig server, IReportStatus status, ConDepSettings settings, ILoadBalance loadBalancer, CancellationToken token) { if (settings.Config.LoadBalancer == null) return; if (server.LoadBalancerState.CurrentState == LoadBalanceState.Offline) return; Logger.WithLogSection(string.Format("Taking server [{0}] offline in load balancer.", server.Name), () => { loadBalancer.BringOffline(server.Name, server.LoadBalancerFarm, LoadBalancerSuspendMethod.Suspend, status); server.LoadBalancerState.CurrentState = LoadBalanceState.Offline; }); }
protected void BringOffline(ServerConfig server, ConDepSettings settings, ILoadBalance loadBalancer, CancellationToken token) { if (settings.Config.LoadBalancer == null) { return; } if (server.LoadBalancerState.CurrentState == LoadBalanceState.Offline) { return; } Logger.WithLogSection($"Taking server [{server.Name}] offline in load balancer.", () => { loadBalancer.BringOffline(server.Name, server.LoadBalancerFarm, LoadBalancerSuspendMethod.Suspend); server.LoadBalancerState.CurrentState = LoadBalanceState.Offline; }); }
private void TurnRoundRobinServersAround(ILoadBalance loadBalancer, IEnumerable <ServerConfig> servers, int roundRobinMaxOfflineServers, ServerConfig testServer, IReportStatus status) { if (testServer != null) { loadBalancer.BringOnline(testServer.Name, testServer.LoadBalancerFarm, status); } var numberOfServers = roundRobinMaxOfflineServers - (testServer == null ? 0 : 1); var serversToBringOnline = servers.Take(numberOfServers); foreach (var server in serversToBringOnline) { loadBalancer.BringOnline(server.Name, server.LoadBalancerFarm, status); } var serversToBringOffline = servers.Skip(numberOfServers); foreach (var server in serversToBringOffline) { loadBalancer.BringOffline(server.Name, server.LoadBalancerFarm, LoadBalancerSuspendMethod.Suspend, status); } }
private IReportStatus ExecuteOnServer(ServerConfig server, IReportStatus status, ConDepOptions options, ILoadBalance loadBalancer, bool bringServerOfflineBeforeExecution, bool bringServerOnlineAfterExecution) { var errorDuringLoadBalancing = false; try { Logger.LogSectionStart(server.Name); if (bringServerOfflineBeforeExecution) { Logger.Info(string.Format("Taking server [{0}] offline in load balancer.", server.Name)); loadBalancer.BringOffline(server.Name, server.LoadBalancerFarm, LoadBalancerSuspendMethod.Suspend, status); } ExecuteOnServer(server, status, options); return(status); } catch { errorDuringLoadBalancing = true; throw; } finally { try { if (bringServerOnlineAfterExecution && !status.HasErrors && !errorDuringLoadBalancing) { Logger.Info(string.Format("Taking server [{0}] online in load balancer.", server.Name)); loadBalancer.BringOnline(server.Name, server.LoadBalancerFarm, status); } } finally { Logger.LogSectionEnd(server.Name); } } }
private IReportStatus ExecuteOnServer(ServerConfig server, IReportStatus status, ConDepOptions options, ILoadBalance loadBalancer, bool bringServerOfflineBeforeExecution, bool bringServerOnlineAfterExecution) { var errorDuringLoadBalancing = false; try { Logger.LogSectionStart(server.Name); if (bringServerOfflineBeforeExecution) { Logger.Info(string.Format("Taking server [{0}] offline in load balancer.", server.Name)); loadBalancer.BringOffline(server.Name, server.LoadBalancerFarm, LoadBalancerSuspendMethod.Suspend, status); } ExecuteOnServer(server, status, options); return status; } catch { errorDuringLoadBalancing = true; throw; } finally { try { if (bringServerOnlineAfterExecution && !status.HasErrors && !errorDuringLoadBalancing) { Logger.Info(string.Format("Taking server [{0}] online in load balancer.", server.Name)); loadBalancer.BringOnline(server.Name, server.LoadBalancerFarm, status); } } finally { Logger.LogSectionEnd(server.Name); } } }
private void TurnRoundRobinServersAround(ILoadBalance loadBalancer, IEnumerable<ServerConfig> servers, int roundRobinMaxOfflineServers, ServerConfig testServer, IReportStatus status) { if(testServer != null) { loadBalancer.BringOnline(testServer.Name, testServer.LoadBalancerFarm, status); } var numberOfServers = roundRobinMaxOfflineServers - (testServer == null ? 0 : 1); var serversToBringOnline = servers.Take(numberOfServers); foreach (var server in serversToBringOnline) { loadBalancer.BringOnline(server.Name, server.LoadBalancerFarm, status); } var serversToBringOffline = servers.Skip(numberOfServers); foreach (var server in serversToBringOffline) { loadBalancer.BringOffline(server.Name, server.LoadBalancerFarm, LoadBalancerSuspendMethod.Suspend, status); } }