public void AreReplicationFactorsSatisfied_Should_ReturnTrue_When_OnlyFullReplicas()
        {
            var ksReplicationFactor = new Dictionary <string, ReplicationFactor>
            {
                { "dc1", ReplicationFactor.Parse("1") },
                { "dc2", ReplicationFactor.Parse("3/1") },
                { "dc3", ReplicationFactor.Parse("1") }
            };
            var replicasByDc = new Dictionary <string, int>
            {
                { "dc1", 1 },
                { "dc2", 2 },
                { "dc3", 1 }
            };
            //no host in DC 3
            var datacenters = new Dictionary <string, DatacenterInfo>
            {
                { "dc1", new DatacenterInfo {
                      HostLength = 10
                  } },
                { "dc2", new DatacenterInfo {
                      HostLength = 10
                  } },
                { "dc3", new DatacenterInfo {
                      HostLength = 10
                  } }
            };

            Assert.True(NetworkTopologyStrategy.AreReplicationFactorsSatisfied(ksReplicationFactor, replicasByDc, datacenters));
        }
Exemple #2
0
        public void Should_Parse_When_TransientReplicationIsDisabled()
        {
            var target = ReplicationFactor.Parse("3");

            Assert.AreEqual(3, target.AllReplicas);
            Assert.AreEqual(0, target.TransientReplicas);
            Assert.AreEqual(3, target.FullReplicas);
            Assert.IsFalse(target.HasTransientReplicas());
        }
Exemple #3
0
        public void Should_Parse_When_TransientReplicationIsEnabled()
        {
            var target = ReplicationFactor.Parse("3/1");

            Assert.AreEqual(3, target.AllReplicas);
            Assert.AreEqual(1, target.TransientReplicas);
            Assert.AreEqual(2, target.FullReplicas);
            Assert.IsTrue(target.HasTransientReplicas());
        }
 public override int GetHashCode()
 {
     unchecked {
         var hashCode = TopicName?.GetHashCode() ?? 0;
         hashCode = (hashCode * 397) ^ NumberOfPartitions;
         hashCode = (hashCode * 397) ^ ReplicationFactor.GetHashCode();
         hashCode = (hashCode * 397) ^ (ReplicaAssignments?.GetHashCode() ?? 0);
         hashCode = (hashCode * 397) ^ (Configs?.GetHashCode() ?? 0);
         return(hashCode);
     }
 }
Exemple #5
0
        public void Should_ReturnTwoReplicasPerToken_When_TransientReplicationIsEnabled()
        {
            var target   = new SimpleStrategy(ReplicationFactor.Parse("3/1"));
            var testData = ReplicationStrategyTestData.Create();

            var result = target.ComputeTokenToReplicaMap(
                testData.Ring, testData.PrimaryReplicas, testData.NumberOfHostsWithTokens, testData.Datacenters);

            // 3 dcs, 3 hosts per rack, 3 racks per dc, 10 tokens per host
            Assert.AreEqual(10 * 3 * 3 * 3, result.Count);

            foreach (var token in result)
            {
                Assert.AreEqual(2, token.Value.Count);
            }
        }
        public void Should_NotReturnEqualsTrue_When_StrategiesHaveDifferentDatacenters()
        {
            var target1 = new NetworkTopologyStrategy(
                new Dictionary <string, ReplicationFactor>
            {
                { "dc1", ReplicationFactor.Parse("2") },
                { "dc2", ReplicationFactor.Parse("3/1") },
            });
            var target2 = new NetworkTopologyStrategy(
                new Dictionary <string, ReplicationFactor>
            {
                { "dc1", ReplicationFactor.Parse("2") },
            });

            Assert.AreNotEqual(target1.GetHashCode(), target2.GetHashCode());
            Assert.IsFalse(target1.Equals(target2));
            Assert.IsFalse(target2.Equals(target1));
            Assert.AreNotEqual(target1, target2);
        }
        public void Should_ReturnEqualsTrueAndSameHashCode_When_BothStrategiesHaveSameReplicationSettings()
        {
            var target1 = new NetworkTopologyStrategy(
                new Dictionary <string, ReplicationFactor>
            {
                { "dc1", ReplicationFactor.Parse("2") },
                { "dc2", ReplicationFactor.Parse("3/1") },
                { "dc3", ReplicationFactor.Parse("3/2") }
            });
            var target2 = new NetworkTopologyStrategy(
                new Dictionary <string, ReplicationFactor>
            {
                { "dc3", ReplicationFactor.Parse("3/2") },
                { "dc1", ReplicationFactor.Parse("2") },
                { "dc2", ReplicationFactor.Parse("3/1") }
            });

            Assert.AreEqual(target1.GetHashCode(), target2.GetHashCode());
            Assert.IsTrue(target1.Equals(target2));
            Assert.IsTrue(target2.Equals(target1));
            Assert.AreEqual(target1, target2);
        }
        public void Should_ReturnAppropriateReplicasPerDcPerToken()
        {
            var target = new NetworkTopologyStrategy(
                new Dictionary <string, ReplicationFactor>
            {
                { "dc1", ReplicationFactor.Parse("2") },
                { "dc2", ReplicationFactor.Parse("3/1") },
                { "dc3", ReplicationFactor.Parse("3/2") }
            });
            var testData = ReplicationStrategyTestData.Create();

            var result = target.ComputeTokenToReplicaMap(
                testData.Ring, testData.PrimaryReplicas, testData.NumberOfHostsWithTokens, testData.Datacenters);

            // 3 dcs, 3 hosts per rack, 3 racks per dc, 10 tokens per host
            Assert.AreEqual(10 * 3 * 3 * 3, result.Count);

            foreach (var token in result)
            {
                // 2 for dc1, 2 for dc2, 1 for dc3
                Assert.AreEqual(2 + 2 + 1, token.Value.Count);
            }
        }
Exemple #9
0
 private Dictionary <string, ReplicationFactor> ParseReplicationFactors(IDictionary <string, string> replicationOptions)
 {
     return(replicationOptions.ToDictionary(kvp => kvp.Key, kvp => ReplicationFactor.Parse(kvp.Value)));
 }