private IDelayedMessage[] pullFromMemCache(string channel, string key = null, int?max = null) { var cacheKey = new CacheKey(channel, key); // Check memcache even if key == null because messages failing to save to ES are put in memcache var messages = new IDelayedMessage[] { }; lock (_cacheLock) { if (_memCache.TryGetValue(cacheKey, out var fromCache)) { _memCache.Remove(cacheKey); } if (fromCache == null) { return(messages); } messages = fromCache.Dequeue(max); if (fromCache.Count != 0) { _memCache[cacheKey] = fromCache; } } return(messages); }
public Task AddToQueue(string channel, IDelayedMessage queued, string key = null) { var specificKey = new Tuple <string, string>(channel, key); _uncommitted.AddOrUpdate(specificKey, new List <IDelayedMessage> { queued }, (k, existing) => { existing.Add(queued); return(existing); }); return(Task.CompletedTask); }
public Task AddToQueue(string channel, IDelayedMessage queued, string key = null) { Logger.Write(LogLevel.Debug, () => $"Appending delayed object to channel [{channel}] key [{key}]"); var specificKey = new Tuple <string, string>(channel, key); _uncommitted.AddOrUpdate(specificKey, new List <IDelayedMessage> { queued }, (k, existing) => { existing.Add(queued); return(existing); }); return(Task.CompletedTask); }
public async Task multiple_bulk_events() { var delayed = new Moq.Mock <IDelayedMessage>(); delayed.Setup(x => x.Headers).Returns(new Dictionary <string, string> { ["test"] = "test" }); var events = new IDelayedMessage[] { delayed.Object, delayed.Object, delayed.Object }; _contextBag.Set(Defaults.LocalBulkHeader, events); var headers = new Dictionary <string, string>(); _context.Setup(x => x.Headers).Returns(headers); await _executor.Invoke(_context.Object, _next.Object); _context.Verify(x => x.UpdateMessageInstance(Moq.It.IsAny <object>()), Moq.Times.Exactly(3)); _next.Verify(x => x(), Moq.Times.Exactly(3)); }
public Task AddToQueue(string channel, IDelayedMessage queued, string key = null) { Logger.Write(LogLevel.Debug, () => $"Appending delayed object to channel [{channel}] key [{key}]"); if (queued == null) { Logger.Write(LogLevel.Warn, () => $"Adding NULL queued object! Stack: {Environment.StackTrace}"); return(Task.CompletedTask); } var specificKey = new Tuple <string, string>(channel, key); lock (_lock) { if (!_uncommitted.ContainsKey(specificKey)) { _uncommitted[specificKey] = new List <IDelayedMessage>(); } _uncommitted[specificKey].Add(queued); } return(Task.CompletedTask); }