//file names protected virtual string GetSearchPattern(TemporaryStorageParameters queueParams) { string version = queueParams.EntityVersion.ToString(); string pattern = $"{queueParams.QueueType}-{version}-{DALConstants.TEMP_FILE_SEARCH_PATTERN}"; return(pattern); }
public virtual Dictionary <Guid, TS> Select(TemporaryStorageParameters queueParams) { var items = new Dictionary <Guid, TS>(); string searchPattern = GetSearchPattern(queueParams); FileInfo[] files = _repository.GetAllFiles(_tempFileFolder, searchPattern); foreach (FileInfo file in files) { TS item = _repository.ReadBinary <TS>(file.FullName); Guid?Id = ParseIdFromFileName(queueParams, file.Name); if (item == null) { string message = string.Format(SenderInternalMessages.Filerepository_CorruptedFile, file.Name); throw new FileNotFoundException(message); } else if (Id.HasValue == false) { string message = string.Format(SenderInternalMessages.Filerepository_InvalidGuidName, file.Name); throw new FileNotFoundException(message); } items.Add(Id.Value, item); } return(items); }
public virtual void Delete(TemporaryStorageParameters queueParams, List <Guid> Ids) { foreach (Guid Id in Ids) { Delete(queueParams, Id); } }
public void TemporaryStorage_InsertTest() { var temporaryStorageParameters = new TemporaryStorageParameters() { QueueType = NotificationsConstants.TS_DISPATCH_QUEUE_KEY, EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION }; var signalEvent = new SignalEvent <long> { TemplateDataDict = new Dictionary <string, string> { { "customer", "Crabs" } }, PredefinedAddresses = new List <DeliveryAddress> { new DeliveryAddress { Address = "address", DeliveryType = 1, Language = "lang" } } }; Guid id = Guid.NewGuid(); _tempStorage.Insert(temporaryStorageParameters, id, signalEvent); TemporaryStorage_SelectTest(id, signalEvent); }
protected virtual string GetFilePath(TemporaryStorageParameters queueParams, Guid Id) { string version = queueParams.EntityVersion.ToString(); string shortId = ShortGuid.Encode(Id); string fileName = $"{queueParams.QueueType}-{version}-{shortId}{DALConstants.TEMP_FILE_EXTENSION}"; return(Path.Combine(_tempFileFolder, fileName)); }
//init public SignalEventFlushJob(SenderSettings senderSettings, ITemporaryStorage <SignalEvent <TKey> > temporaryStorage , ISignalEventQueries <TKey> queries) : base(senderSettings, temporaryStorage, queries) { FlushPeriod = senderSettings.FlushJobFlushPeriod; QueueLimit = senderSettings.FlushJobQueueLimit; IsTemporaryStorageEnabled = senderSettings.SignalQueueIsTemporaryStorageEnabled; _temporaryStorageParameters = new TemporaryStorageParameters() { QueueType = NotificationsConstants.TS_EVENT_QUEUE_KEY, EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION }; }
private void TemporaryStorage_SelectTest(Guid id, SignalEvent <long> expectedSignalEvent) { var temporaryStorageParameters = new TemporaryStorageParameters() { QueueType = NotificationsConstants.TS_DISPATCH_QUEUE_KEY, EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION }; Dictionary <Guid, SignalEvent <long> > eventsList = _tempStorage .Select(temporaryStorageParameters); SignalEvent <long> actualEvent = eventsList[id]; actualEvent.TemplateDataDict["customer"].ShouldBe("Crabs"); actualEvent.PredefinedAddresses[0].Address.ShouldBe("address"); }
//init public EventQueue(SenderSettings senderSettings, ITemporaryStorage <SignalEvent <TKey> > temporaryStorage , ISignalFlushJob <SignalEvent <TKey> > signalFlushJob, ILogger logger) : base(temporaryStorage) { _signalFlushJob = signalFlushJob; _logger = logger; PersistBeginOnItemsCount = senderSettings.SignalQueuePersistBeginOnItemsCount; PersistEndOnItemsCount = senderSettings.SignalQueuePersistEndOnItemsCount; IsTemporaryStorageEnabled = senderSettings.SignalQueueIsTemporaryStorageEnabled; _temporaryStorageParameters = new TemporaryStorageParameters() { QueueType = NotificationsConstants.TS_EVENT_QUEUE_KEY, EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION }; }
//init public DispatchQueue(SenderSettings senderSettings, ITemporaryStorage <SignalDispatch <TKey> > temporaryStorage , IDispatchChannelRegistry <TKey> dispatcherRegistry, ISignalFlushJob <SignalDispatch <TKey> > signalFlushJob , ILogger logger) : base(temporaryStorage) { _dispatcherRegistry = dispatcherRegistry; _signalFlushJob = signalFlushJob; _logger = logger; RetryPeriod = senderSettings.SignalQueueRetryPeriod; MaxFailedAttempts = senderSettings.DatabaseSignalProviderItemsMaxFailedAttempts; PersistBeginOnItemsCount = senderSettings.SignalQueuePersistBeginOnItemsCount; PersistEndOnItemsCount = senderSettings.SignalQueuePersistEndOnItemsCount; IsTemporaryStorageEnabled = senderSettings.SignalQueueIsTemporaryStorageEnabled; _temporaryStorageParameters = new TemporaryStorageParameters() { QueueType = NotificationsConstants.TS_DISPATCH_QUEUE_KEY, EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION }; }
//init public SignalDispatchFlushJob(SenderSettings senderSettings, ITemporaryStorage <SignalDispatch <TKey> > temporaryStorage, ISignalDispatchQueries <TKey> dispatchQueries, ILockTracker <TKey> dispatchLockTracker, IConsolidationLockTracker <TKey> consolidationLockTracker) : base(senderSettings, temporaryStorage, dispatchQueries) { _dispatchQueries = dispatchQueries; _dispatchLockTracker = dispatchLockTracker; _consolidationLockTracker = consolidationLockTracker; IsTemporaryStorageEnabled = senderSettings.SignalQueueIsTemporaryStorageEnabled; _temporaryStorageParameters = new TemporaryStorageParameters() { QueueType = NotificationsConstants.TS_DISPATCH_QUEUE_KEY, EntityVersion = NotificationsConstants.TS_ENTITIES_VERSION }; //how to flush items _flushQueues[FlushAction.DeleteConsolidated] = new FlushQueue <SignalWrapper <SignalDispatch <TKey> > >(signals => DeleteConsolidatedDispatches(signals)); //what to do after flushing _flushedItemsHandlers.Add(ForgetDispatchLocks); _flushedItemsHandlers.Add(ForgetConsolidationLocks); }
protected virtual Guid?ParseIdFromFileName(TemporaryStorageParameters queueParams, string fileName) { Match match = _fileIdRegex.Match(fileName); if (match.Success == false || match.Groups.Count < 2 || match.Groups[1].Success == false) { return(null); } string shortGuidId = match.Groups[1].Value; try { Guid Id = ShortGuid.Decode(shortGuidId); return(Id); } catch { } return(null); }
public virtual void Delete(TemporaryStorageParameters queueParams, Guid Id) { string filePath = GetFilePath(queueParams, Id); _repository.Delete(filePath); }
public virtual void Update(TemporaryStorageParameters queueParams, Guid Id, TS item) { Insert(queueParams, Id, item); }
//file actions public virtual void Insert(TemporaryStorageParameters queueParams, Guid Id, TS item) { string filePath = GetFilePath(queueParams, Id); _repository.CreateBinary(filePath, item); }