Exemplo n.º 1
0
        public void ExecuteDelete(CTable table)
        {
            var cassandraSession = CassandraCluster.Connect(table.KeySpace);

            foreach (var row in table.Data)
            {
                StringBuilder cqlQuery = new StringBuilder();

                cqlQuery.Append($"DELETE FROM {table.Name} ");
                cqlQuery.Append("WHERE ");
                bool firstField          = true;
                var  cassandraParameters = new object[row.Count(x => x.IsPrimaryKey)];
                var  pkItemIndex         = 0;

                foreach (var field in row.Where(x => x.IsPrimaryKey))
                {
                    if (firstField == false)
                    {
                        cqlQuery.Append(" AND ");
                    }
                    cqlQuery.Append($" {field.Name} = ? ");

                    cassandraParameters[pkItemIndex] = field.Value;

                    firstField = false;
                    pkItemIndex++;
                }

                var ps = cassandraSession.Prepare(cqlQuery.ToString());
                var cassandraStatement = ps.Bind(cassandraParameters);
                cassandraSession.Execute(cassandraStatement);
            }
        }
Exemplo n.º 2
0
        public virtual void SetUp()
        {
            KeyspaceName = $"TestKeyspace_{Guid.NewGuid():N}";
            var cassandraClusterSettings = SingleCassandraNodeSetUpFixture.Node.CreateSettings();

            cassandraClusterSettings.AllowNullTimestamp    = true;
            cassandraClusterSettings.ReadConsistencyLevel  = ConsistencyLevel.ALL;
            cassandraClusterSettings.WriteConsistencyLevel = ConsistencyLevel.ALL;
            cassandraCluster                 = new CassandraCluster(cassandraClusterSettings, Logger.Instance);
            columnFamilyConnection           = cassandraCluster.RetrieveColumnFamilyConnection(KeyspaceName, Constants.ColumnFamilyName);
            columnFamilyConnectionDefaultTtl = cassandraCluster.RetrieveColumnFamilyConnection(KeyspaceName, Constants.DefaultTtlColumnFamilyName);
            cassandraCluster.ActualizeKeyspaces(new[]
            {
                new KeyspaceScheme
                {
                    Name          = KeyspaceName,
                    Configuration = new KeyspaceConfiguration
                    {
                        ReplicationStrategy = SimpleReplicationStrategy.Create(1),
                        ColumnFamilies      = new[]
                        {
                            new ColumnFamily
                            {
                                Name = Constants.ColumnFamilyName
                            },
                            new ColumnFamily
                            {
                                Name       = Constants.DefaultTtlColumnFamilyName,
                                DefaultTtl = 1
                            }
                        }
                    }
                }
            });
        }
Exemplo n.º 3
0
        public RemoteLockerTester(RemoteLockerTesterConfig config = null)
        {
            config = config ?? RemoteLockerTesterConfig.Default();
            var localRivalOptimizationIsEnabled = config.LocalRivalOptimization != LocalRivalOptimization.Disabled;
            var serializer = new Serializer(new AllPropertiesExtractor(), null, GroBufOptions.MergeOnRead);
            ICassandraCluster cassandraCluster = new CassandraCluster(config.CassandraClusterSettings, logger);

            if (config.CassandraFailProbability.HasValue)
            {
                cassandraCluster = new FailedCassandraCluster(cassandraCluster, config.CassandraFailProbability.Value);
            }
            var timestampProvider                 = new StochasticTimestampProvider(config.TimestampProviderStochasticType, config.LockTtl);
            var implementationSettings            = new CassandraRemoteLockImplementationSettings(timestampProvider, SingleCassandraNodeSetUpFixture.RemoteLockKeyspace, SingleCassandraNodeSetUpFixture.RemoteLockColumnFamily, config.LockTtl, config.LockMetadataTtl, config.KeepLockAliveInterval, config.ChangeLockRowThreshold);
            var cassandraRemoteLockImplementation = new CassandraRemoteLockImplementation(cassandraCluster, serializer, implementationSettings);

            remoteLockers       = new RemoteLocker[config.LockersCount];
            remoteLockerMetrics = new RemoteLockerMetrics("dummyKeyspace");
            if (localRivalOptimizationIsEnabled)
            {
                var remoteLocker = new RemoteLocker(cassandraRemoteLockImplementation, remoteLockerMetrics, logger);
                for (var i = 0; i < config.LockersCount; i++)
                {
                    remoteLockers[i] = remoteLocker;
                }
            }
            else
            {
                for (var i = 0; i < config.LockersCount; i++)
                {
                    remoteLockers[i] = new RemoteLocker(new CassandraRemoteLockImplementation(cassandraCluster, serializer, implementationSettings), remoteLockerMetrics, logger);
                }
            }
            // it is important to use another CassandraCluster (with another setting of attempts, for example)
            cassandraRemoteLockImplementationForCheckings = new CassandraRemoteLockImplementation(new CassandraCluster(SingleCassandraNodeSetUpFixture.CreateCassandraClusterSettings(), logger), serializer, implementationSettings);
        }
        private void SomeActionThatRequiresAuthentication(string username, string password, ILog logger = null)
        {
            var settings = node.CreateSettings();

            settings.Credentials = new Credentials(username, password);
            using (var cluster = new CassandraCluster(settings, logger ?? new SilentLog()))
                cluster.RetrieveClusterConnection().RetrieveKeyspaces();
        }
Exemplo n.º 5
0
        public void OneTimeSetUp()
        {
            var serializer       = new Serializer(new AllPropertiesExtractor(), null, GroBufOptions.MergeOnRead);
            var cassandraCluster = new CassandraCluster(SingleCassandraNodeSetUpFixture.CreateCassandraClusterSettings(), logger);
            var settings         = new CassandraRemoteLockImplementationSettings(new DefaultTimestampProvider(), SingleCassandraNodeSetUpFixture.RemoteLockKeyspace, SingleCassandraNodeSetUpFixture.RemoteLockColumnFamily, TimeSpan.FromMinutes(3), TimeSpan.FromDays(30), TimeSpan.FromSeconds(5), 10);

            remoteLockImplementation = new CassandraRemoteLockImplementation(cassandraCluster, serializer, settings);
        }
Exemplo n.º 6
0
        protected virtual IEventRepository CreateBoxEventRepository(Func <EventId, object, string> calculateShard)
        {
            var serializer        = new Serializer(new AllPropertiesExtractor());
            var cassandraCluster  = new CassandraCluster(cassandraClusterSettings, Logger.Instance);
            var eventTypeRegistry = new EventTypeRegistry();

            var factory = new EventRepositoryFactory(serializer, cassandraCluster, eventTypeRegistry, Logger.Instance);
            var eventRepositoryColumnFamilyFullNames = new EventRepositoryColumnFamilyFullNames(
                ColumnFamilies.eventLog,
                ColumnFamilies.eventLogAdditionalInfo,
                ColumnFamilies.remoteLock);
            var shardCalculator = new ShardCalculator(calculateShard);
            var eventRepository = factory.CreateEventRepository(shardCalculator, eventRepositoryColumnFamilyFullNames, new EventLogNullProfiler(), TimeSpan.FromDays(1));

            return(eventRepository);
        }
        public void SetUp()
        {
            cluster = new CassandraCluster(SingleCassandraNodeSetUpFixture.Node.CreateSettings(), Logger.Instance);

            var clusterConnection = cluster.RetrieveClusterConnection();
            var keyspaceName      = TestSchemaUtils.GetRandomKeyspaceName();
            var createdKeyspace   = new Keyspace
            {
                Name = keyspaceName,
                ReplicationStrategy = SimpleReplicationStrategy.Create(1)
            };

            clusterConnection.AddKeyspace(createdKeyspace);

            keyspaceConnection = cluster.RetrieveKeyspaceConnection(keyspaceName);
        }
        public static void SetUp()
        {
            var templateDirectory = Path.Combine(FindCassandraTemplateDirectory(AppDomain.CurrentDomain.BaseDirectory), @"v3.11.x");
            var deployDirectory   = Path.Combine(Path.GetTempPath(), "deployed_cassandra_v3.11.x");

            cassandraNode = new LocalCassandraNode(templateDirectory, deployDirectory)
            {
                RpcPort    = 9360,
                CqlPort    = 9343,
                JmxPort    = 7399,
                GossipPort = 7400,
            };
            cassandraNode.Restart(timeout: TimeSpan.FromMinutes(1));

            cassandraCluster = new CassandraCluster(cassandraNode.CreateSettings(), Logger.Instance);
            var cassandraSchemaActualizer = new CassandraSchemaActualizer(cassandraCluster, null, Logger.Instance);

            cassandraSchemaActualizer.ActualizeKeyspaces(new[]
            {
                new KeyspaceSchema
                {
                    Name          = ksName,
                    Configuration = new KeyspaceConfiguration
                    {
                        ReplicationStrategy = SimpleReplicationStrategy.Create(replicationFactor: 1),
                        ColumnFamilies      = new[]
                        {
                            new ColumnFamily
                            {
                                Name = minTicksCfName,
                                CompactionStrategy = CompactionStrategy.LeveledCompactionStrategy(sstableSizeInMb: 160),
                                Caching            = ColumnFamilyCaching.All
                            },
                            new ColumnFamily
                            {
                                Name = maxTicksCfName,
                                CompactionStrategy = CompactionStrategy.LeveledCompactionStrategy(sstableSizeInMb: 160),
                                Caching            = ColumnFamilyCaching.KeysOnly
                            }
                        }
                    }
                },
            }, changeExistingKeyspaceMetadata: false);
        }
Exemplo n.º 9
0
        public static void SetUp()
        {
            Log4NetConfiguration.InitializeOnce();
            var templateDirectory = Path.Combine(FindCassandraTemplateDirectory(AppDomain.CurrentDomain.BaseDirectory), @"v3.11.x");
            var deployDirectory   = Path.Combine(Path.GetTempPath(), "deployed_cassandra_v3.11.x");

            node = new LocalCassandraNode(templateDirectory, deployDirectory)
            {
                RpcPort    = 9360,
                CqlPort    = 9343,
                JmxPort    = 7399,
                GossipPort = 7400,
            };
            node.Restart(timeout: TimeSpan.FromMinutes(1));

            var logger = Log4NetConfiguration.RootLogger.ForContext(nameof(SingleCassandraNodeSetUpFixture));

            cassandraCluster = new CassandraCluster(CreateCassandraClusterSettings(), logger);

            var cassandraSchemaActualizer = new CassandraSchemaActualizer(cassandraCluster, eventListener: null, logger);

            cassandraSchemaActualizer.ActualizeKeyspaces(new[]
            {
                new KeyspaceSchema
                {
                    Name          = RemoteLockKeyspace,
                    Configuration = new KeyspaceConfiguration
                    {
                        ReplicationStrategy = SimpleReplicationStrategy.Create(replicationFactor: 1),
                        ColumnFamilies      = new[]
                        {
                            new ColumnFamily
                            {
                                Name    = RemoteLockColumnFamily,
                                Caching = ColumnFamilyCaching.KeysOnly
                            }
                        }
                    }
                }
            }, changeExistingKeyspaceMetadata: false);
        }
        // todo (a.dobrynin, 08.02.2022): replace with depends_on.condition.service_healthy when appveyor updates docker compose to 1.29+ on windows hosts
        private static ICassandraCluster TryConnectToCassandra(string cassandraAddress, ILog log)
        {
            var timeout  = TimeSpan.FromMinutes(2);
            var interval = TimeSpan.FromSeconds(10);
            var sw       = Stopwatch.StartNew();

            while (sw.Elapsed < timeout)
            {
                try
                {
                    var localEndPoint            = new IPEndPoint(GetIpV4Address(cassandraAddress), 9160);
                    var cassandraClusterSettings = new CassandraClusterSettings
                    {
                        Endpoints = new[] { localEndPoint },
                        EndpointForFierceCommands = localEndPoint,
                        ReadConsistencyLevel      = ConsistencyLevel.QUORUM,
                        WriteConsistencyLevel     = ConsistencyLevel.QUORUM,
                        Attempts              = 5,
                        Timeout               = 6000,
                        FierceTimeout         = 6000,
                        ConnectionIdleTimeout = TimeSpan.FromMinutes(10),
                    };
                    ICassandraCluster cassandraCluster = new CassandraCluster(cassandraClusterSettings, log);
                    _ = cassandraCluster.RetrieveClusterConnection().DescribeVersion();
                    log.Info($"Successfully connected to cassandra after {sw.Elapsed.TotalSeconds} seconds");
                    return(cassandraCluster);
                }
                catch (Exception e)
                {
                    log.Info(e, "Connection attempt failed");
                }

                Thread.Sleep(interval);
            }

            throw new Exception($"Failed to wait for local cassandra node to start in {timeout.TotalSeconds} seconds");
        }
Exemplo n.º 11
0
        public void ExecuteInsert(CTable table)
        {
            var cassandraSession = CassandraCluster.Connect(table.KeySpace);


            foreach (var row in table.Data)
            {
                StringBuilder cqlQuery  = new StringBuilder();
                StringBuilder cqlValues = new StringBuilder();
                cqlQuery.Append($"INSERT INTO {table.Name} ");
                cqlQuery.Append("(");
                bool firstField          = true;
                var  cassandraParameters = new object[row.Count()];
                var  itemIndex           = 0;
                foreach (var field in row)
                {
                    if (firstField == false)
                    {
                        cqlQuery.Append(",");
                        cqlValues.Append(",");
                    }
                    cqlQuery.Append(field.Name);
                    cqlValues.Append("?");

                    cassandraParameters[itemIndex] = field.Value;

                    firstField = false;
                    itemIndex++;
                }
                cqlQuery.Append(")");
                cqlQuery.Append($" VALUES ({cqlValues.ToString()}); ");
                var ps = cassandraSession.Prepare(cqlQuery.ToString());
                var cassandraStatement = ps.Bind(cassandraParameters);
                cassandraSession.Execute(cassandraStatement);
            }
        }
 public void SetUp()
 {
     cluster = new CassandraCluster(SingleCassandraNodeSetUpFixture.Node.CreateSettings(), Logger.Instance);
 }
 public void SetUp()
 {
     cluster = new CassandraCluster(SingleCassandraNodeSetUpFixture.Node.CreateSettings(), Logger.Instance);
     cassandraActualizerEventListener = new CassandraActualizerEventListener();
     actualizer = new SchemeActualizer(cluster, cassandraActualizerEventListener, Logger.Instance);
 }