protected virtual void QueryStorage() { _lastQueryTimeUtc = DateTime.UtcNow; _isLastQueryMaxItemsReceived = false; Stopwatch storageQueryTimer = Stopwatch.StartNew(); List <SignalEvent <TKey> > items = null; try { items = _eventQueries .Find(ItemsQueryCount, MaxFailedAttempts) .Result; } catch (Exception ex) { items = new List <SignalEvent <TKey> >(); _logger.LogError(ex, SenderInternalMessages.DatabaseEventProvider_DatabaseError); } _monitor.EventPersistentStorageQueried(storageQueryTimer.Elapsed, items); _isLastQueryMaxItemsReceived = items.Count == ItemsQueryCount; if (_changeNotifier != null && _isLastQueryMaxItemsReceived == false) { _changeNotifier.StartMonitor(); } _eventQueue.Append(items, true); }
//cache protected virtual async Task <TotalResult <List <DispatchTemplate <TKey> > > > GetFromCacheOrFetch() { if (_cache != null && (_changeNotifier == null || _changeNotifier.HasUpdates == false)) { return(_cache); } TotalResult <List <DispatchTemplate <TKey> > > allItems = await _storageQueries.SelectPage(0, int.MaxValue) .ConfigureAwait(false); _cache = allItems; if (_changeNotifier != null) { _changeNotifier.StartMonitor(); } return(allItems); }
protected virtual void QueryStorage(List <int> activeDeliveryTypes) { //update query state _lastQueryTimeUtc = DateTime.UtcNow; _lastQueryKeys = activeDeliveryTypes; _isLastQueryMaxItemsReceived = false; //query items Stopwatch storageQueryTimer = Stopwatch.StartNew(); DateTime lockStartUtc = DateTime.UtcNow; List <SignalDispatch <TKey> > items = null; try { items = PickStorageQuery(activeDeliveryTypes); } catch (Exception ex) { items = new List <SignalDispatch <TKey> >(); _logger.LogError(ex, SenderInternalMessages.DatabaseDispatchProvider_DatabaseError); } storageQueryTimer.Stop(); //enqueue items for processing _dispatchQueue.Append(items, true); //turn on database event tracking _isLastQueryMaxItemsReceived = items.Count == ItemsQueryCount; if (_changeNotifier != null && _isLastQueryMaxItemsReceived == false) { _changeNotifier.StartMonitor(); } //store metrics _monitor.DispatchPersistentStorageQueried(storageQueryTimer.Elapsed, items); //remember processed items, not to query them again while processing _lockTracker.RememberLock(items.Select(x => x.SignalDispatchId), lockStartUtc); }