public RemoteTaskQueue(ILog logger, ISerializer serializer, IGlobalTime globalTime, ICassandraCluster cassandraCluster, IRtqSettings rtqSettings, IRtqTaskDataRegistry taskDataRegistry, IRtqProfiler rtqProfiler) { QueueKeyspace = rtqSettings.QueueKeyspace; TaskTtl = rtqSettings.TaskTtl; Logger = logger.ForContext("CassandraDistributedTaskQueue"); Serializer = serializer; GlobalTime = globalTime; TaskDataRegistry = taskDataRegistry; enableContinuationOptimization = rtqSettings.EnableContinuationOptimization; minTicksHolder = new RtqMinTicksHolder(cassandraCluster, rtqSettings); TaskMinimalStartTicksIndex = new TaskMinimalStartTicksIndex(cassandraCluster, serializer, rtqSettings, new OldestLiveRecordTicksHolder(minTicksHolder), Logger); var taskMetaStorage = new TaskMetaStorage(cassandraCluster, serializer, rtqSettings, Logger); EventLogRepository = new EventLogRepository(serializer, cassandraCluster, rtqSettings, minTicksHolder); childTaskIndex = new ChildTaskIndex(cassandraCluster, rtqSettings, serializer, taskMetaStorage); HandleTasksMetaStorage = new HandleTasksMetaStorage(taskMetaStorage, TaskMinimalStartTicksIndex, EventLogRepository, GlobalTime, childTaskIndex, taskDataRegistry, Logger); TaskDataStorage = new TaskDataStorage(cassandraCluster, rtqSettings, Logger); TaskExceptionInfoStorage = new TaskExceptionInfoStorage(cassandraCluster, serializer, rtqSettings, Logger); HandleTaskCollection = new HandleTaskCollection(HandleTasksMetaStorage, TaskDataStorage, TaskExceptionInfoStorage, rtqProfiler); lazyRemoteLockCreator = new Lazy <IRemoteLockCreator>(() => { var remoteLockImplementationSettings = CassandraRemoteLockImplementationSettings.Default(rtqSettings.QueueKeyspace, RtqColumnFamilyRegistry.LocksColumnFamilyName); var remoteLockImplementation = new CassandraRemoteLockImplementation(cassandraCluster, serializer, remoteLockImplementationSettings); var remoteLockerMetrics = new RemoteLockerMetrics($"{rtqSettings.QueueKeyspace}_{RtqColumnFamilyRegistry.LocksColumnFamilyName}"); return(new RemoteLocker(remoteLockImplementation, remoteLockerMetrics, Logger)); }); Profiler = rtqProfiler; }
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); }
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); }
public TestCounterRepository(ILog log, ICassandraCluster cassandraCluster, ISerializer serializer, IGlobalTime globalTime, IRtqSettings rtqSettings) { this.serializer = serializer; this.globalTime = globalTime; var keyspaceName = rtqSettings.QueueKeyspace; cfConnection = cassandraCluster.RetrieveColumnFamilyConnection(keyspaceName, ColumnFamilyName); var remoteLockImplementationSettings = CassandraRemoteLockImplementationSettings.Default(keyspaceName, RtqColumnFamilyRegistry.LocksColumnFamilyName); var remoteLockImplementation = new CassandraRemoteLockImplementation(cassandraCluster, serializer, remoteLockImplementationSettings); remoteLockCreator = new RemoteLocker(remoteLockImplementation, new RemoteLockerMetrics(keyspaceName), log); }
public IEventRepository CreateEventRepository(IShardCalculator shardCalculator, IEventRepositoryColumnFamilyFullNames columnFamilies, IEventLogProfiler profiler, TimeSpan eventsTtl) { var eventLogPointerCreator = new EventLogPointerCreator(); var remoteLockImplementation = new CassandraRemoteLockImplementation(cassandraCluster, serializer, CassandraRemoteLockImplementationSettings.Default(columnFamilies.RemoteLock.KeyspaceName, columnFamilies.RemoteLock.ColumnFamilyName)); var remoteLocker = new RemoteLocker(remoteLockImplementation, new RemoteLockerMetrics(columnFamilies.RemoteLock.KeyspaceName), logger); var eventLoggerAdditionalInfoRepository = new EventLoggerAdditionalInfoRepository(cassandraCluster, serializer, remoteLocker, columnFamilies.EventLogAdditionalInfo, columnFamilies.EventLog); var eventStorage = new EventStorage(columnFamilies.EventLog, eventLogPointerCreator, cassandraCluster, serializer); Func <IQueueRaker> createQueueRaker = () => new QueueRaker(eventStorage, eventLoggerAdditionalInfoRepository, profiler, logger, eventsTtl); var eventLogger = new EventLogger(cassandraCluster, serializer, columnFamilies.EventLog, eventLogPointerCreator, createQueueRaker, eventLoggerAdditionalInfoRepository, profiler, logger); return(new EventRepository(eventTypeIdentifierProvider, eventLogger, shardCalculator, serializer)); }