Пример #1
0
            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);
            }
Пример #2
0
            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;
            }