コード例 #1
0
 public void TearDown()
 {
     ClusterObjSync?.Shutdown();
     ClusterObjNotSync?.Shutdown();
     TestCluster?.Remove();
 }
コード例 #2
0
        public void TokenMap_Should_RebuildTokenMap_When_NodeIsDecommissioned()
        {
            var listener = new TestTraceListener();
            var level    = Diagnostics.CassandraTraceSwitch.Level;

            Diagnostics.CassandraTraceSwitch.Level = TraceLevel.Verbose;
            Trace.Listeners.Add(listener);
            try
            {
                TestCluster = TestClusterManager.CreateNew(3, new TestClusterOptions {
                    UseVNodes = true
                });
                var keyspaceName = TestUtils.GetUniqueKeyspaceName().ToLower();
                ClusterObjSync = Cluster.Builder()
                                 .AddContactPoint(TestCluster.InitialContactPoint)
                                 .WithMetadataSyncOptions(new MetadataSyncOptions().SetMetadataSyncEnabled(true))
                                 .WithReconnectionPolicy(new ConstantReconnectionPolicy(5000))
                                 .Build();

                ClusterObjNotSync = Cluster.Builder()
                                    .AddContactPoint(TestCluster.InitialContactPoint)
                                    .WithMetadataSyncOptions(new MetadataSyncOptions().SetMetadataSyncEnabled(false))
                                    .WithReconnectionPolicy(new ConstantReconnectionPolicy(5000))
                                    .Build();

                var sessionNotSync = ClusterObjNotSync.Connect();
                var sessionSync    = ClusterObjSync.Connect();

                var createKeyspaceCql = $"CREATE KEYSPACE {keyspaceName} WITH replication = {{'class': 'SimpleStrategy', 'replication_factor' : 3}}";
                sessionNotSync.Execute(createKeyspaceCql);

                TestUtils.WaitForSchemaAgreement(ClusterObjNotSync);
                TestUtils.WaitForSchemaAgreement(ClusterObjSync);

                sessionNotSync.ChangeKeyspace(keyspaceName);
                sessionSync.ChangeKeyspace(keyspaceName);

                ICollection <Host> replicasSync    = null;
                ICollection <Host> replicasNotSync = null;

                TestHelper.RetryAssert(() =>
                {
                    Assert.AreEqual(3, ClusterObjSync.Metadata.Hosts.Count);
                    Assert.AreEqual(3, ClusterObjNotSync.Metadata.Hosts.Count);

                    replicasSync    = ClusterObjSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));
                    replicasNotSync = ClusterObjNotSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));

                    Assert.AreEqual(3, replicasSync.Count);
                    Assert.AreEqual(1, replicasNotSync.Count);
                }, 100, 150);

                var oldTokenMapNotSync = ClusterObjNotSync.Metadata.TokenToReplicasMap;
                var oldTokenMapSync    = ClusterObjSync.Metadata.TokenToReplicasMap;

                if (TestClusterManager.SupportsDecommissionForcefully())
                {
                    this.TestCluster.DecommissionNodeForcefully(1);
                }
                else
                {
                    this.TestCluster.DecommissionNode(1);
                }

                this.TestCluster.Stop(1);

                TestHelper.RetryAssert(() =>
                {
                    Assert.AreEqual(2, ClusterObjSync.Metadata.Hosts.Count, "ClusterObjSync.Metadata.Hosts.Count");
                    Assert.AreEqual(2, ClusterObjNotSync.Metadata.Hosts.Count, "ClusterObjNotSync.Metadata.Hosts.Count");

                    replicasSync    = ClusterObjSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));
                    replicasNotSync = ClusterObjNotSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));

                    Assert.AreEqual(2, replicasSync.Count, "replicasSync.Count");
                    Assert.AreEqual(1, replicasNotSync.Count, "replicasNotSync.Count");

                    Assert.IsFalse(object.ReferenceEquals(ClusterObjNotSync.Metadata.TokenToReplicasMap, oldTokenMapNotSync));
                    Assert.IsFalse(object.ReferenceEquals(ClusterObjSync.Metadata.TokenToReplicasMap, oldTokenMapSync));
                }, 1000, 360);

                oldTokenMapNotSync = ClusterObjNotSync.Metadata.TokenToReplicasMap;
                oldTokenMapSync    = ClusterObjSync.Metadata.TokenToReplicasMap;

                this.TestCluster.BootstrapNode(4);
                TestHelper.RetryAssert(() =>
                {
                    Assert.AreEqual(3, ClusterObjSync.Metadata.Hosts.Count);
                    Assert.AreEqual(3, ClusterObjNotSync.Metadata.Hosts.Count);

                    replicasSync    = ClusterObjSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));
                    replicasNotSync = ClusterObjNotSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));

                    Assert.AreEqual(3, replicasSync.Count);
                    Assert.AreEqual(1, replicasNotSync.Count);

                    Assert.IsFalse(object.ReferenceEquals(ClusterObjNotSync.Metadata.TokenToReplicasMap, oldTokenMapNotSync));
                    Assert.IsFalse(object.ReferenceEquals(ClusterObjSync.Metadata.TokenToReplicasMap, oldTokenMapSync));
                }, 1000, 360);
            }
            catch (Exception ex)
            {
                Trace.Flush();
                Assert.Fail("Exception: " + ex.ToString() + Environment.NewLine + string.Join(Environment.NewLine, listener.Queue.ToArray()));
            }
            finally
            {
                Trace.Listeners.Remove(listener);
                Diagnostics.CassandraTraceSwitch.Level = level;
            }
        }
コード例 #3
0
        public void TokenMap_Should_RebuildTokenMap_When_NodeIsDecommissioned()
        {
            TestCluster = TestClusterManager.CreateNew(3, new TestClusterOptions {
                UseVNodes = true
            });
            var keyspaceName = TestUtils.GetUniqueKeyspaceName().ToLower();

            ClusterObjSync = Cluster.Builder()
                             .AddContactPoint(TestCluster.InitialContactPoint)
                             .WithMetadataSyncOptions(new MetadataSyncOptions().SetMetadataSyncEnabled(true))
                             .Build();

            ClusterObjNotSync = Cluster.Builder()
                                .AddContactPoint(TestCluster.InitialContactPoint)
                                .WithMetadataSyncOptions(new MetadataSyncOptions().SetMetadataSyncEnabled(false))
                                .Build();

            var sessionNotSync = ClusterObjNotSync.Connect();
            var sessionSync    = ClusterObjSync.Connect();

            var createKeyspaceCql = $"CREATE KEYSPACE {keyspaceName} WITH replication = {{'class': 'SimpleStrategy', 'replication_factor' : 3}}";

            sessionNotSync.Execute(createKeyspaceCql);

            TestUtils.WaitForSchemaAgreement(ClusterObjNotSync);
            TestUtils.WaitForSchemaAgreement(ClusterObjSync);

            sessionNotSync.ChangeKeyspace(keyspaceName);
            sessionSync.ChangeKeyspace(keyspaceName);

            ICollection <Host> replicasSync    = null;
            ICollection <Host> replicasNotSync = null;

            TestHelper.RetryAssert(() =>
            {
                Assert.AreEqual(3, ClusterObjSync.Metadata.Hosts.Count);
                Assert.AreEqual(3, ClusterObjNotSync.Metadata.Hosts.Count);

                replicasSync    = ClusterObjSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));
                replicasNotSync = ClusterObjNotSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));

                Assert.AreEqual(3, replicasSync.Count);
                Assert.AreEqual(1, replicasNotSync.Count);
            }, 100, 150);

            var oldTokenMapNotSync = ClusterObjNotSync.Metadata.TokenToReplicasMap;
            var oldTokenMapSync    = ClusterObjSync.Metadata.TokenToReplicasMap;

            if (TestClusterManager.SupportsDecommissionForcefully())
            {
                this.TestCluster.DecommissionNodeForcefully(1);
            }
            else
            {
                this.TestCluster.DecommissionNode(1);
            }

            this.TestCluster.Remove(1);

            TestHelper.RetryAssert(() =>
            {
                Assert.AreEqual(2, ClusterObjSync.Metadata.Hosts.Count);
                Assert.AreEqual(2, ClusterObjNotSync.Metadata.Hosts.Count);

                replicasSync    = ClusterObjSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));
                replicasNotSync = ClusterObjNotSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));

                Assert.AreEqual(2, replicasSync.Count);
                Assert.AreEqual(1, replicasNotSync.Count);

                Assert.IsFalse(object.ReferenceEquals(ClusterObjNotSync.Metadata.TokenToReplicasMap, oldTokenMapNotSync));
                Assert.IsFalse(object.ReferenceEquals(ClusterObjSync.Metadata.TokenToReplicasMap, oldTokenMapSync));
            }, 1000, 360);

            oldTokenMapNotSync = ClusterObjNotSync.Metadata.TokenToReplicasMap;
            oldTokenMapSync    = ClusterObjSync.Metadata.TokenToReplicasMap;

            this.TestCluster.BootstrapNode(4);
            TestHelper.RetryAssert(() =>
            {
                Assert.AreEqual(3, ClusterObjSync.Metadata.Hosts.Count);
                Assert.AreEqual(3, ClusterObjNotSync.Metadata.Hosts.Count);

                replicasSync    = ClusterObjSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));
                replicasNotSync = ClusterObjNotSync.Metadata.GetReplicas(keyspaceName, Encoding.UTF8.GetBytes("123"));

                Assert.AreEqual(3, replicasSync.Count);
                Assert.AreEqual(1, replicasNotSync.Count);

                Assert.IsFalse(object.ReferenceEquals(ClusterObjNotSync.Metadata.TokenToReplicasMap, oldTokenMapNotSync));
                Assert.IsFalse(object.ReferenceEquals(ClusterObjSync.Metadata.TokenToReplicasMap, oldTokenMapSync));
            }, 1000, 360);
        }