public void CalculateLeasesToTake_OwnLeasesOnly_ReturnsEmpty()
        {
            EqualPartitionsBalancingStrategy   strategy     = this.CreateStrategy();
            IEnumerable <DocumentServiceLease> leasesToTake = strategy.SelectLeasesToTake(new[] { this.CreateLease(ownerSelf, "1"), this.CreateLease(ownerSelf, "2") });

            Assert.IsTrue(leasesToTake.Count() == 0);
        }
Ejemplo n.º 2
0
        public void CalculateLeasesToTake_NoLeases_ReturnsEmpty()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var leasesToTake = strategy.SelectLeasesToTake(Enumerable.Empty <ILease>());

            Assert.Empty(leasesToTake);
        }
        public void CalculateLeasesToTake_NoLeases_ReturnsEmpty()
        {
            EqualPartitionsBalancingStrategy   strategy     = this.CreateStrategy();
            IEnumerable <DocumentServiceLease> leasesToTake = strategy.SelectLeasesToTake(Enumerable.Empty <DocumentServiceLease>());

            Assert.IsTrue(leasesToTake.Count() == 0);
        }
Ejemplo n.º 4
0
        public void CalculateLeasesToTake_OwnLeasesOnly_ReturnsEmpty()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var leasesToTake = strategy.SelectLeasesToTake(new [] { CreateLease(ownerSelf, "1"), CreateLease(ownerSelf, "2") });

            Assert.Empty(leasesToTake);
        }
        internal PartitionManager BuildPartitionManager()
        {
            CheckpointerObserverFactory <T> factory      = new CheckpointerObserverFactory <T>(this.observerFactory, this.changeFeedProcessorOptions.CheckpointFrequency);
            PartitionSynchronizerCore       synchronizer = new PartitionSynchronizerCore(
                this.monitoredContainer,
                this.documentServiceLeaseStoreManager.LeaseContainer,
                this.documentServiceLeaseStoreManager.LeaseManager,
                PartitionSynchronizerCore.DefaultDegreeOfParallelism,
                this.changeFeedProcessorOptions.QueryFeedMaxBatchSize);
            BootstrapperCore bootstrapper = new BootstrapperCore(synchronizer, this.documentServiceLeaseStoreManager.LeaseStore, BootstrapperCore.DefaultLockTime, BootstrapperCore.DefaultSleepTime);
            PartitionSupervisorFactoryCore <T> partitionSuperviserFactory = new PartitionSupervisorFactoryCore <T>(
                factory,
                this.documentServiceLeaseStoreManager.LeaseManager,
                new FeedProcessorFactoryCore <T>(this.monitoredContainer, this.changeFeedProcessorOptions, this.documentServiceLeaseStoreManager.LeaseCheckpointer, this.monitoredContainer.ClientContext.SerializerCore),
                this.changeFeedLeaseOptions);

            EqualPartitionsBalancingStrategy loadBalancingStrategy = new EqualPartitionsBalancingStrategy(
                this.instanceName,
                EqualPartitionsBalancingStrategy.DefaultMinLeaseCount,
                EqualPartitionsBalancingStrategy.DefaultMaxLeaseCount,
                this.changeFeedLeaseOptions.LeaseExpirationInterval);

            PartitionController partitionController = new PartitionControllerCore(this.documentServiceLeaseStoreManager.LeaseContainer, this.documentServiceLeaseStoreManager.LeaseManager, partitionSuperviserFactory, synchronizer);

            partitionController = new HealthMonitoringPartitionControllerDecorator(partitionController, new TraceHealthMonitor());
            PartitionLoadBalancerCore partitionLoadBalancer = new PartitionLoadBalancerCore(
                partitionController,
                this.documentServiceLeaseStoreManager.LeaseContainer,
                loadBalancingStrategy,
                this.changeFeedLeaseOptions.LeaseAcquireInterval);

            return(new PartitionManagerCore(bootstrapper, partitionController, partitionLoadBalancer));
        }
Ejemplo n.º 6
0
        public void CalculateLeasesToTake_NotOwnedLeasesOnly_ReturnsAll()
        {
            EqualPartitionsBalancingStrategy strategy  = CreateStrategy();
            HashSet <DocumentServiceLease>   allLeases = new HashSet <DocumentServiceLease> {
                CreateLease(ownerNone, "1"), CreateLease(ownerNone, "2")
            };
            IEnumerable <DocumentServiceLease> leasesToTake = strategy.SelectLeasesToTake(allLeases);

            CollectionAssert.AreEqual(allLeases.ToList(), (new HashSet <DocumentServiceLease>(leasesToTake)).ToList());
        }
        public void CalculateLeasesToTake_ExpiredLeasesOnly_ReturnsAll()
        {
            EqualPartitionsBalancingStrategy strategy  = this.CreateStrategy();
            HashSet <DocumentServiceLease>   allLeases = new HashSet <DocumentServiceLease> {
                this.CreateExpiredLease(ownerSelf, "1"), this.CreateExpiredLease(owner1, "2")
            };
            IEnumerable <DocumentServiceLease> leasesToTake = strategy.SelectLeasesToTake(allLeases);

            CollectionAssert.AreEqual(allLeases.ToList(), new HashSet <DocumentServiceLease>(leasesToTake).ToList());
        }
Ejemplo n.º 8
0
        public void CalculateLeasesToTake_ExpiredLeasesOnly_ReturnsAll()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var allLeases = new HashSet <ILease> {
                CreateExpiredLease(ownerSelf, "1"), CreateExpiredLease(owner1, "2")
            };
            var leasesToTake = strategy.SelectLeasesToTake(allLeases);

            Assert.Equal(allLeases, new HashSet <ILease>(leasesToTake));
        }
        public void CalculateLeasesToTake_NotOwnedLeasesOnly_ReturnsAllWithNoOwnerReason()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var allLeases = new HashSet <ILease> {
                CreateLease(ownerNone, "1"), CreateLease(ownerNone, "2")
            };
            var leasesToTake = strategy.SelectLeasesToTake(allLeases);

            Assert.Equal(allLeases, new HashSet <ILease>(leasesToTake));
            Assert.All(leasesToTake, l => AssertAcquireReason(l, LeaseAcquireReason.NotOwned));
        }
        public void CalculateLeasesToTake_AllOtherOwnersEqualTargetCount_ReturnsEmpty()
        {
            EqualPartitionsBalancingStrategy strategy  = this.CreateStrategy();
            List <DocumentServiceLease>      allLeases = new List <DocumentServiceLease>();

            allLeases.AddRange(Enumerable.Range(1, 4).Select(index => this.CreateLease(owner1, "A" + index.ToString())));
            allLeases.AddRange(Enumerable.Range(1, 3).Select(index => this.CreateLease(ownerSelf, "B" + index.ToString())));
            List <DocumentServiceLease> leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.IsTrue(leasesToTake.Count == 0);
        }
Ejemplo n.º 11
0
        public void CalculateLeasesToTake_AllOtherOwnersEqualTargetCount_ReturnsEmpty()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var allLeases = new List <ILease>();

            allLeases.AddRange(Enumerable.Range(1, 4).Select(index => CreateLease(owner1, "A" + index.ToString())));
            allLeases.AddRange(Enumerable.Range(1, 3).Select(index => CreateLease(ownerSelf, "B" + index.ToString())));
            var leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.Empty(leasesToTake);
        }
Ejemplo n.º 12
0
        public void CalculateLeasesToTake_OtherSingleOwnerTwoLeasesOnly_ReturnsOne()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var allLeases = new HashSet <ILease> {
                CreateLease(owner1, "1"), CreateLease(owner1, "2")
            };
            var leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.Single(leasesToTake);
            Assert.Subset(allLeases, new HashSet <ILease>(leasesToTake));
        }
        public void CalculateLeasesToTake_OtherSingleOwnerTwoLeasesOnly_ReturnsOne()
        {
            EqualPartitionsBalancingStrategy strategy  = this.CreateStrategy();
            HashSet <DocumentServiceLease>   allLeases = new HashSet <DocumentServiceLease> {
                this.CreateLease(owner1, "1"), this.CreateLease(owner1, "2")
            };
            List <DocumentServiceLease> leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.IsTrue(leasesToTake.Count == 1);
            CollectionAssert.IsSubsetOf(new HashSet <DocumentServiceLease>(leasesToTake).ToList(), allLeases.ToList());
        }
        public void CalculateLeasesToTake_MinPartitionsSet_ReturnsMinCountOfPartitions()
        {
            EqualPartitionsBalancingStrategy strategy   = this.CreateStrategy(minPartitionCount: 7);
            List <DocumentServiceLease>      allLeases1 = new List <DocumentServiceLease>();

            allLeases1.Add(this.CreateLease(owner1, "0"));
            allLeases1.AddRange(Enumerable.Range(1, 10).Select(index => this.CreateExpiredLease(owner1, index.ToString())));
            List <DocumentServiceLease> allLeases    = allLeases1;
            List <DocumentServiceLease> leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.AreEqual(7, leasesToTake.Count);
        }
Ejemplo n.º 15
0
        public void CalculateLeasesToTake_NeedTwoAndOtherOwnersEqualThanTargetCount_ReturnsLease()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var allLeases = new List <ILease>();

            allLeases.AddRange(Enumerable.Range(1, 10).Select(index => CreateLease(owner1, "A" + index.ToString())));
            allLeases.AddRange(Enumerable.Range(1, 10).Select(index => CreateLease(owner2, "B" + index.ToString())));
            allLeases.AddRange(Enumerable.Range(1, 8).Select(index => CreateLease(ownerSelf, "C" + index.ToString())));
            var leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.Single(leasesToTake);
        }
Ejemplo n.º 16
0
        public void CalculateLeasesToTake_TwoOwners_ReturnsStolenFromLargerOwner()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var allLeases = new List <ILease>();

            allLeases.AddRange(Enumerable.Range(1, 5).Select(index => CreateLease(owner1, "A" + index.ToString())));
            allLeases.AddRange(Enumerable.Range(1, 10).Select(index => CreateLease(owner2, "B" + index.ToString())));
            var    leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();
            ILease stolenLease  = Assert.Single(leasesToTake);

            Assert.StartsWith("B", stolenLease.PartitionId);
        }
        public void CalculateLeasesToTake_TwoOwners_ReturnsLeaseWithStealReason()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var allLeases = new List <ILease>();

            allLeases.AddRange(Enumerable.Range(1, 5).Select(index => CreateLease(owner1, "A" + index.ToString())));
            allLeases.AddRange(Enumerable.Range(1, 10).Select(index => CreateLease(owner2, "B" + index.ToString())));
            var    leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();
            ILease stolenLease  = Assert.Single(leasesToTake);

            AssertAcquireReason(stolenLease, LeaseAcquireReason.Steal);
        }
        public void CalculateLeasesToTake_TwoOwners_ReturnsStolenFromLargerOwner()
        {
            EqualPartitionsBalancingStrategy strategy  = this.CreateStrategy();
            List <DocumentServiceLease>      allLeases = new List <DocumentServiceLease>();

            allLeases.AddRange(Enumerable.Range(1, 5).Select(index => this.CreateLease(owner1, "A" + index.ToString())));
            allLeases.AddRange(Enumerable.Range(1, 10).Select(index => this.CreateLease(owner2, "B" + index.ToString())));
            List <DocumentServiceLease> leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.IsTrue(leasesToTake.Count == 1);
            Assert.IsTrue(leasesToTake.First().CurrentLeaseToken.StartsWith("B"));
        }
Ejemplo n.º 19
0
        public void CalculateLeasesToTake_OtherOwnerGreaterThanTargetCount_ReturnsLease()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var allLeases = new List <ILease>();

            allLeases.AddRange(Enumerable.Range(1, 4).Select(index => CreateLease(owner1, "A" + index.ToString())));
            allLeases.AddRange(Enumerable.Range(1, 2).Select(index => CreateLease(ownerSelf, "B" + index.ToString())));
            var    leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();
            ILease stolenLease  = Assert.Single(leasesToTake);

            Assert.StartsWith("A", stolenLease.PartitionId);
        }
Ejemplo n.º 20
0
        public void CalculateLeasesToTake_MaxPartitionsSet_ReturnsMaxCountOfPartitions()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy(maxPartitionCount: 3);
            var allLeases1 = new List <ILease>();

            allLeases1.Add(CreateLease(owner1, "0"));
            allLeases1.AddRange(Enumerable.Range(1, 10).Select(index => CreateExpiredLease(owner1, index.ToString())));
            var allLeases    = allLeases1;
            var leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.Equal(3, leasesToTake.Count);
        }
        public void CalculateLeasesToTake_OtherOwnerGreaterThanTargetCount_ReturnsLease()
        {
            EqualPartitionsBalancingStrategy strategy  = this.CreateStrategy();
            List <DocumentServiceLease>      allLeases = new List <DocumentServiceLease>();

            allLeases.AddRange(Enumerable.Range(1, 4).Select(index => this.CreateLease(owner1, "A" + index.ToString())));
            allLeases.AddRange(Enumerable.Range(1, 2).Select(index => this.CreateLease(ownerSelf, "B" + index.ToString())));
            List <DocumentServiceLease> leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.IsTrue(leasesToTake.Count == 1);
            Assert.IsTrue(leasesToTake.First().CurrentLeaseToken.StartsWith("A"));
        }
Ejemplo n.º 22
0
        public void CalculateLeasesToTake_ExpiredAndOtherSingleOwner_ReturnsHalfOfExpiredRoundedUp()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            var allLeases1 = new List <ILease>();

            allLeases1.Add(CreateLease(owner1, "0"));
            allLeases1.AddRange(Enumerable.Range(1, 10).Select(index => CreateExpiredLease(owner1, index.ToString())));
            var allLeases    = allLeases1;
            var leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.Equal(6, leasesToTake.Count);
        }
Ejemplo n.º 23
0
        public void CalculateLeasesToTake_ExpiredAndOtherOwner_ReturnsExpiredOnly()
        {
            EqualPartitionsBalancingStrategy strategy = CreateStrategy();
            ILease expiredLease = CreateExpiredLease(owner1, "4");
            var    allLeases    = new HashSet <ILease>
            {
                CreateLease(owner1, "1"),
                CreateLease(owner1, "2"),
                CreateLease(owner1, "3"),
                expiredLease
            };
            var leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.Single(leasesToTake);
            Assert.Contains(expiredLease, leasesToTake);
        }
        public void CalculateLeasesToTake_ExpiredAndOtherOwner_ReturnsExpiredOnly()
        {
            EqualPartitionsBalancingStrategy strategy     = this.CreateStrategy();
            DocumentServiceLease             expiredLease = this.CreateExpiredLease(owner1, "4");
            HashSet <DocumentServiceLease>   allLeases    = new HashSet <DocumentServiceLease>
            {
                this.CreateLease(owner1, "1"),
                this.CreateLease(owner1, "2"),
                this.CreateLease(owner1, "3"),
                expiredLease
            };
            List <DocumentServiceLease> leasesToTake = strategy.SelectLeasesToTake(allLeases).ToList();

            Assert.IsTrue(leasesToTake.Count == 1);
            CollectionAssert.Contains(leasesToTake, expiredLease);
        }