/// <summary> /// Allocates a message in a block and returns the block the message is in. /// </summary> /// <returns>The cached message block which the message was allocated in.</returns> public CachedMessageBlock AllocateMessage(CachedMessage message) { CachedMessageBlock returnBlock = currentMessageBlock ?? (currentMessageBlock = messagePool.Allocate()); returnBlock.Add(message); // blocks at capacity are eligable for purge, so we don't want to be holding on to them. if (!currentMessageBlock.HasCapacity) { currentMessageBlock = messagePool.Allocate(); } return(returnBlock); }
private void AddAndCheck(CachedMessageBlock <TestCachedMessage> block, ICacheDataAdapter <TestQueueMessage, TestCachedMessage> dataAdapter, TestQueueMessage message, int first, int last) { Assert.Equal(first, block.OldestMessageIndex); Assert.Equal(last, block.NewestMessageIndex); Assert.True(block.HasCapacity); block.Add(message, DateTime.UtcNow, dataAdapter); last++; Assert.Equal(first > last, block.IsEmpty); Assert.Equal(last + 1 < TestBlockSize, block.HasCapacity); Assert.Equal(first, block.OldestMessageIndex); Assert.Equal(last, block.NewestMessageIndex); Assert.True(block.GetSequenceToken(last, dataAdapter).Equals(message.SequenceToken)); }
private void AddAndCheck(CachedMessageBlock <TestQueueMessage, TestCachedMessage> block, TestQueueMessage message, int first, int last) { Assert.AreEqual(first, block.OldestMessageIndex); Assert.AreEqual(last, block.NewestMessageIndex); Assert.IsTrue(block.HasCapacity); block.Add(message); last++; Assert.AreEqual(first > last, block.IsEmpty); Assert.AreEqual(last + 1 < TestBlockSize, block.HasCapacity); Assert.AreEqual(first, block.OldestMessageIndex); Assert.AreEqual(last, block.NewestMessageIndex); Assert.IsTrue(block.GetSequenceToken(last).Equals(message.SequenceToken)); }