Ejemplo n.º 1
0
 public void adding_multiple_same_read_message()
 {
     var buffer = new StreamBuffer(10, 10, -1, true);
     var id1 = Guid.NewGuid();
     buffer.AddReadMessage(BuildMessageAt(id1, 0));
     buffer.AddReadMessage(BuildMessageAt(id1, 0));
     Assert.AreEqual(2, buffer.BufferCount);
     OutstandingMessage message;
     Assert.IsTrue(buffer.TryDequeue(out message));
     Assert.AreEqual(id1, message.EventId);
     Assert.IsTrue(buffer.TryDequeue(out message));
     Assert.AreEqual(id1, message.EventId);
     Assert.IsFalse(buffer.Live);
 }
Ejemplo n.º 2
0
 public void HandleReadCompleted(ResolvedEvent[] events, int newposition, bool isEndOfStream)
 {
     lock (_lock)
     {
         if ((_state & PersistentSubscriptionState.OutstandingPageRequest) == 0)
         {
             return;
         }
         _state &= ~PersistentSubscriptionState.OutstandingPageRequest;
         if (_streamBuffer.Live)
         {
             return;
         }
         foreach (var ev in events)
         {
             _streamBuffer.AddReadMessage(new OutstandingMessage(ev.OriginalEvent.EventId, null, ev, 0));
         }
         if (_streamBuffer.Live)
         {
             SetLive();
         }
         if (isEndOfStream)
         {
             SetLive();
             _streamBuffer.MoveToLive();
             return;
         }
         _lastPulledEvent = newposition;
         TryReadingNewBatch();
         TryPushingMessagesToClients();
     }
 }
Ejemplo n.º 3
0
 public void HandleReadCompleted(ResolvedEvent[] events, long newposition, bool isEndOfStream)
 {
     lock (_lock)
     {
         if ((_state & PersistentSubscriptionState.OutstandingPageRequest) == 0) return;
         _state &= ~PersistentSubscriptionState.OutstandingPageRequest;
         if (_streamBuffer.Live) return;
         foreach (var ev in events)
         {
             _streamBuffer.AddReadMessage(new OutstandingMessage(ev.OriginalEvent.EventId, null, ev, 0));
         }
         if (events.Length > 0)
         {
             _statistics.SetLastKnownEventNumber(events[events.Length - 1].OriginalEventNumber);
         }
         if (_streamBuffer.Live)
         {
             SetLive();
         }
         if (isEndOfStream)
         {
             if(_streamBuffer.TryMoveToLive()){
                 SetLive();
                 return;
             }
         }
         _nextEventToPullFrom = newposition;
         TryReadingNewBatch();
         TryPushingMessagesToClients();
     }
 }
Ejemplo n.º 4
0
 public void adding_multiple_same_read_message()
 {
     var buffer = new StreamBuffer(10, 10, -1, true);
     var id1 = Guid.NewGuid();
     buffer.AddReadMessage(BuildMessageAt(id1, 0));
     buffer.AddReadMessage(BuildMessageAt(id1, 0));
     Assert.AreEqual(2, buffer.BufferCount);
     var messagePointer = buffer.Scan().First();
     Assert.AreEqual(id1, messagePointer.Message.EventId);
     messagePointer.MarkSent();
     Assert.AreEqual(1, buffer.BufferCount);
     messagePointer = buffer.Scan().First();
     Assert.AreEqual(id1, messagePointer.Message.EventId);
     messagePointer.MarkSent();
     Assert.AreEqual(0, buffer.BufferCount);
     Assert.IsFalse(buffer.Live);
 }
Ejemplo n.º 5
0
 public void adding_read_message_in_correct_order()
 {
     var buffer = new StreamBuffer(10, 10, -1, true);
     var id = Guid.NewGuid();
     buffer.AddReadMessage(BuildMessageAt(id, 0));
     Assert.AreEqual(1, buffer.BufferCount);
     OutstandingMessage message = buffer.Scan().First().Message;
     Assert.AreEqual(id, message.EventId);
     Assert.IsFalse(buffer.Live);
 }
Ejemplo n.º 6
0
 public void adding_messages_to_read_after_same_on_live_switches_to_live()
 {
     var buffer = new StreamBuffer(10, 10, -1, true);
     var id1 = Guid.NewGuid();
     buffer.AddLiveMessage(BuildMessageAt(id1, 0));
     buffer.AddReadMessage(BuildMessageAt(id1, 0));
     Assert.IsTrue(buffer.Live);
     Assert.AreEqual(1, buffer.BufferCount);
     OutstandingMessage message;
     Assert.IsTrue(buffer.TryDequeue(out message));
     Assert.AreEqual(id1, message.EventId);
 }
Ejemplo n.º 7
0
        public void HandleReadCompleted(ResolvedEvent[] events, IPersistentSubscriptionStreamPosition newPosition, bool isEndOfStream)
        {
            lock (_lock) {
                if ((_state & PersistentSubscriptionState.OutstandingPageRequest) == 0)
                {
                    return;
                }
                _state &= ~PersistentSubscriptionState.OutstandingPageRequest;
                if (StreamBuffer.Live)
                {
                    return;
                }
                foreach (var ev in events)
                {
                    StreamBuffer.AddReadMessage(OutstandingMessage.ForNewEvent(ev, _settings.EventSource.GetStreamPositionFor(ev)));
                }

                if (events.Length > 0)
                {
                    _statistics.SetLastKnownEventPosition(_settings.EventSource.GetStreamPositionFor(events[^ 1]));
Ejemplo n.º 8
0
 public void adding_messages_to_read_after_same_on_live_switches_to_live()
 {
     var buffer = new StreamBuffer(10, 10, -1, true);
     var id1 = Guid.NewGuid();
     buffer.AddLiveMessage(BuildMessageAt(id1, 0));
     buffer.AddReadMessage(BuildMessageAt(id1, 0));
     Assert.IsTrue(buffer.Live);
     Assert.AreEqual(1, buffer.BufferCount);
     var messagePointer = buffer.Scan().First();
     Assert.AreEqual(id1, messagePointer.Message.EventId);
     messagePointer.MarkSent();
     Assert.AreEqual(0, buffer.BufferCount);
 }
Ejemplo n.º 9
0
        public void retried_messages_appear_in_version_order()
        {
            var buffer = new StreamBuffer(10, 10, -1, true);
            var id1 = Guid.NewGuid();
            buffer.AddReadMessage(BuildMessageAt(id1, 0));
            var id2 = Guid.NewGuid();
            var id3 = Guid.NewGuid();
            var id4 = Guid.NewGuid();
            var id5 = Guid.NewGuid();
            buffer.AddRetry(BuildMessageAt(id2, 2));
            buffer.AddRetry(BuildMessageAt(id3, 3));
            buffer.AddRetry(BuildMessageAt(id4, 1));
            buffer.AddRetry(BuildMessageAt(id5, 2));

            var messagePointer = buffer.Scan().First();
            Assert.AreEqual(id4, messagePointer.Message.EventId);
            messagePointer.MarkSent();

            messagePointer = buffer.Scan().First();
            Assert.AreEqual(id2, messagePointer.Message.EventId);
            messagePointer.MarkSent();

            messagePointer = buffer.Scan().First();
            Assert.AreEqual(id5, messagePointer.Message.EventId);
            messagePointer.MarkSent();

            messagePointer = buffer.Scan().First();
            Assert.AreEqual(id3, messagePointer.Message.EventId);
            messagePointer.MarkSent();

        }
Ejemplo n.º 10
0
        public void retried_messages_appear_first()
        {
            var buffer = new StreamBuffer(10, 10, -1, true);
            var id1 = Guid.NewGuid();
            buffer.AddReadMessage(BuildMessageAt(id1, 0));
            var id2 = Guid.NewGuid();
            buffer.AddRetry(BuildMessageAt(id2, 2));
            Assert.AreEqual(2, buffer.BufferCount);
            Assert.AreEqual(1, buffer.RetryBufferCount);
            Assert.AreEqual(1, buffer.ReadBufferCount);

            var messagePointer = buffer.Scan().First();
            Assert.AreEqual(id2, messagePointer.Message.EventId);
            messagePointer.MarkSent();
            Assert.AreEqual(1, buffer.BufferCount);
            Assert.AreEqual(0, buffer.RetryBufferCount);
            Assert.AreEqual(1, buffer.ReadBufferCount);

            messagePointer = buffer.Scan().First();
            Assert.AreEqual(id1, messagePointer.Message.EventId);
            messagePointer.MarkSent();
            Assert.AreEqual(0, buffer.BufferCount);
            Assert.AreEqual(0, buffer.RetryBufferCount);
            Assert.AreEqual(0, buffer.ReadBufferCount);

            Assert.IsFalse(buffer.Live);
        }
Ejemplo n.º 11
0
        public void skipped_messages_are_not_removed()
        {
            var buffer = new StreamBuffer(10, 10, -1, true);
            var id1 = Guid.NewGuid();
            buffer.AddReadMessage(BuildMessageAt(id1, 0));
            var id2 = Guid.NewGuid();
            buffer.AddReadMessage(BuildMessageAt(id2, 1));
            var id3 = Guid.NewGuid();
            buffer.AddReadMessage(BuildMessageAt(id3, 2));
            Assert.AreEqual(3, buffer.BufferCount);
            
            var messagePointer2 = buffer.Scan().Skip(1).First(); // Skip the first message.
            Assert.AreEqual(id2, messagePointer2.Message.EventId);
            messagePointer2.MarkSent();
            Assert.AreEqual(2, buffer.BufferCount);

            var messagePointers = buffer.Scan().ToArray();
            Assert.AreEqual(id1, messagePointers[0].Message.EventId);
            Assert.AreEqual(id3, messagePointers[1].Message.EventId);
        }
Ejemplo n.º 12
0
 public void adding_messages_with_lower_in_live()
 {
     var buffer = new StreamBuffer(10, 10, -1, true);
     var id1 = Guid.NewGuid();
     var id2 = Guid.NewGuid();
     buffer.AddLiveMessage(BuildMessageAt(id1, 5));
     buffer.AddLiveMessage(BuildMessageAt(id1, 6));
     buffer.AddLiveMessage(BuildMessageAt(id2, 7));
     buffer.AddReadMessage(BuildMessageAt(id1, 7));
     Assert.IsTrue(buffer.Live);
     Assert.AreEqual(1, buffer.BufferCount);
     var messagePointer = buffer.Scan().First();
     Assert.AreEqual(id2, messagePointer.Message.EventId);
     messagePointer.MarkSent();
     Assert.AreEqual(0, buffer.BufferCount);
 }
Ejemplo n.º 13
0
 public void adding_messages_with_lower_in_live()
 {
     var buffer = new StreamBuffer(10, 10, -1, true);
     var id1 = Guid.NewGuid();
     var id2 = Guid.NewGuid();
     buffer.AddLiveMessage(BuildMessageAt(id1, 5));
     buffer.AddLiveMessage(BuildMessageAt(id1, 6));
     buffer.AddLiveMessage(BuildMessageAt(id2, 7));
     buffer.AddReadMessage(BuildMessageAt(id1, 7));
     Assert.IsTrue(buffer.Live);
     Assert.AreEqual(1, buffer.BufferCount);
     OutstandingMessage message;
     Assert.IsTrue(buffer.TryDequeue(out message));
     Assert.AreEqual(id2, message.EventId);
 }