public Group Initialize( string name, Repository repository, float failureWindowSeconds, float allowedFailureRate, float warningFailureRate, TimeSpan backOffTime, IEnumerable <Server> servers, Dictionary <string, StoredProcedure> storedProcedures) { Name = name; _repository = repository; _failureWindowSeconds = failureWindowSeconds; _allowedFailureRate = allowedFailureRate; _warningFailureRate = warningFailureRate; _backOffTime = backOffTime; _servers = servers.ToArray(); _storedProcedures = storedProcedures; _serversByRole = new Dictionary <string, Server[]>(); foreach (var server in _servers) { server.Group = this; if (_serversByRole.TryGetValue(server.ReplicationRole, out var serversWithRole)) { var tempArray = new Server[serversWithRole.Length + 1]; serversWithRole.CopyTo(tempArray, 1); tempArray[0] = server; _serversByRole[server.ReplicationRole] = tempArray; } else { _serversByRole[server.ReplicationRole] = new[] { server }; } } _history = new HistoryBucketQueue <HistoryBucket, bool>( TimeSpan.FromSeconds(failureWindowSeconds), 20, () => new HistoryBucket(), (bucket, item) => bucket.Add(item), (bucket, ticks) => bucket.Clear(ticks)); _retryAt = null; _evaluateAt = DateTime.UtcNow.AddSeconds(_failureWindowSeconds); return(this); }
public Group Initialize( Repository repository, float failureWindowSeconds, float allowedFailureRate, float warningFailureRate, TimeSpan backOffTime, IEnumerable<Server> servers) { _repository = repository; _failureWindowSeconds = failureWindowSeconds; _allowedFailureRate = allowedFailureRate; _warningFailureRate = warningFailureRate; _backOffTime = backOffTime; _servers = servers.ToArray(); foreach (var server in _servers) server.Group = this; _history = new HistoryBucketQueue<HistoryBucket, bool>( TimeSpan.FromSeconds(failureWindowSeconds), 20, () => new HistoryBucket(), (bucket, item) => bucket.Add(item), (bucket, ticks) => bucket.Clear(ticks)); _retryAt = null; _evaluateAt = DateTime.UtcNow.AddSeconds(_failureWindowSeconds); return this; }