Пример #1
0
        public void Modify(Uri replica, IList <Uri> allReplicas, IReplicaStorageProvider storageProvider, Request request, ref double weight)
        {
            DateTime lastGrayTimestamp;

            var storage = storageProvider.Obtain <DateTime>(storageKey);

            if (!storage.TryGetValue(replica, out lastGrayTimestamp))
            {
                return;
            }

            var currentTime = timeProvider.GetCurrentTime();
            var grayPeriod  = grayPeriodProvider.GetGrayPeriod();

            if (lastGrayTimestamp + grayPeriod >= currentTime)
            {
                weight = 0.0;
            }
            else
            {
                if (storage.Remove(replica, lastGrayTimestamp))
                {
                    LogReplicaIsNoLongerGray(replica);
                }
            }
        }
        public void SetUp()
        {
            weight   = 1.0;
            request  = Request.Get("foo/bar");
            replica1 = new Uri("http://replica1");
            replica2 = new Uri("http://replica2");
            replicas = new List <Uri> {
                replica1, replica2
            };
            storage = new ConcurrentDictionary <Uri, DateTime>();

            storageProvider = Substitute.For <IReplicaStorageProvider>();
            storageProvider.Obtain <DateTime>(Arg.Any <string>()).Returns(storage);

            periodProvider = Substitute.For <IGrayPeriodProvider>();
            periodProvider.GetGrayPeriod().Returns(5.Minutes());

            timeProvider = Substitute.For <ITimeProvider>();
            timeProvider.GetCurrentTime().Returns(currentTime = DateTime.UtcNow);

            modifier = new GrayListModifier(periodProvider, timeProvider, new ConsoleLog());
        }