Example #1
0
        public IgnoreFailedEndpointsPolicy(List <Uri> endpoints, TimeSpan failedEndpointExpiryInterval, IEndpointIgnorePolicy innerPolicy = null)
        {
            _failedEndpointExpiryInterval = failedEndpointExpiryInterval;
            _innerPolicy        = innerPolicy;
            _innerPolicyLockObj = new object();

            PopulateEndpoints(endpoints);
        }
        public IgnoreFailedEndpointsPolicy(List<Uri> endpoints, TimeSpan failedEndpointExpiryInterval, IEndpointIgnorePolicy innerPolicy = null)
        {
            _failedEndpointExpiryInterval = failedEndpointExpiryInterval;
            _innerPolicy = innerPolicy;
            _innerPolicyLockObj = new object();

            PopulateEndpoints(endpoints);
        }
        internal Uri ChooseEndpointRoundRobin(IEndpointIgnorePolicy policy)
        {
            Uri chosenEndpoint;
            int attemptCounter = 0;

            do
            {
                chosenEndpoint = _allEndpoints[_endpointIndex++ % _allEndpoints.Length];
                attemptCounter++;
                if (attemptCounter >= _allEndpoints.Length)
                {
                    Trace.TraceWarning("All endpoints were ignored by the policy. Avoiding further skipping.....");
                    break;
                }
            } while (policy.ShouldIgnoreEndpoint(chosenEndpoint));

            Debug.WriteLine("Endpoint {0} chosen for the request", chosenEndpoint);

            return(chosenEndpoint);
        }
        private void InitializeEndpoints(List <string> regionServerHostNames)
        {
            Random rnd = new Random();

            lockObj = new object();

            var endpointsList = new List <Uri>();

            _endpointIndex = rnd.Next();

            foreach (var server in regionServerHostNames)
            {
                var candidate = string.Format("http://{0}:{1}", server, _workerRestEndpointPort);
                endpointsList.Add(new Uri(candidate));
            }

            _allEndpoints = endpointsList.OrderBy(x => rnd.Next()).ToArray();

            _endpointIgnorePolicy = new IgnoreFailedEndpointsPolicy(endpointsList, _refreshInterval);
        }