public void HandleParkedReadCompleted(ResolvedEvent[] events, int newposition, bool isEndofStrem, int stopAt) { lock (_lock) { if ((_state & PersistentSubscriptionState.ReplayingParkedMessages) == 0) { return; } foreach (var ev in events) { if (ev.OriginalEventNumber == stopAt) { break; } Log.Debug("Retrying event {0} on subscription {1}", ev.OriginalEvent.EventId, _settings.SubscriptionId); _streamBuffer.AddRetry(new OutstandingMessage(ev.OriginalEvent.EventId, null, ev, 0)); } TryPushingMessagesToClients(); if (isEndofStrem || stopAt <= newposition) { var replayedEnd = newposition == -1 ? stopAt : Math.Min(stopAt, newposition); _settings.MessageParker.BeginMarkParkedMessagesReprocessed(replayedEnd); _state ^= PersistentSubscriptionState.ReplayingParkedMessages; } else { TryReadingParkedMessagesFrom(newposition, stopAt); } } }
private void RetryMessage(ResolvedEvent @event, int count) { Log.Debug("Retrying message {subscriptionId} {stream}/{eventNumber}", SubscriptionId, @event.OriginalStreamId, @event.OriginalEventNumber); _outstandingMessages.Remove(@event.OriginalEvent.EventId); _pushClients.RemoveProcessingMessages(@event.OriginalEvent.EventId); StreamBuffer.AddRetry(new OutstandingMessage(@event.OriginalEvent.EventId, null, @event, count + 1)); }
public void lowest_retry_doesnt_assume_order() { var buffer = new StreamBuffer(10, 10, -1, true); buffer.AddRetry(BuildMessageAt(Guid.NewGuid(), 4)); buffer.AddRetry(BuildMessageAt(Guid.NewGuid(), 2)); buffer.AddRetry(BuildMessageAt(Guid.NewGuid(), 3)); Assert.AreEqual(2, buffer.GetLowestRetry()); }
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(); }
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); }
public void RetrySingleMessage(ResolvedEvent @event) { StreamBuffer.AddRetry(new OutstandingMessage(@event.OriginalEvent.EventId, null, @event, 0)); }