public ConsumerPushResult PushMessageToClient(OutstandingMessage message) { if (_state == null) { return(ConsumerPushResult.NoMoreCapacity); } if (_state.AvailableCapacity == 0) { return(ConsumerPushResult.NoMoreCapacity); } uint bucket = GetAssignmentId(message.ResolvedEvent); if (_state.Assignments[bucket].State != BucketAssignment.BucketState.Assigned) { _state.AssignBucket(bucket); } if (!_state.Assignments[bucket].Node.Client.Push(message)) { return(ConsumerPushResult.Skipped); } _state.RecordEventSent(bucket); return(ConsumerPushResult.Sent); }
private OutstandingMessage BuildMessageAt(int position, Guid?forcedEventId = null) { IPersistentSubscriptionStreamPosition previousEventPosition = position > 0 ? Helper.GetStreamPositionFor(position - 1, _eventSource) : null; var @event = BuildEventAt(position, forcedEventId); return(OutstandingMessage.ForPushedEvent( OutstandingMessage.ForNewEvent(@event, Helper.GetStreamPositionFor(position, _eventSource)), position, previousEventPosition).message); }
private OutstandingMessage BuildMessageAt(int eventPosition, EventSource eventSource, Guid?forcedEventId = null) { IPersistentSubscriptionStreamPosition previousEventPosition = eventPosition > 0 ? GetStreamPositionFor(eventPosition - 1) : null; var @event = Helper.GetFakeEventFor(eventPosition, eventSource, forcedEventId); return(OutstandingMessage.ForPushedEvent( OutstandingMessage.ForNewEvent(@event, GetStreamPositionFor(eventPosition)), eventPosition, previousEventPosition).message); }
public void lowest_ignores_replayed_events() { var cache = new OutstandingMessageCache(); //normal event: cache.StartMessage(BuildMessageAt(5, _eventSource), DateTime.Now); //replayed event: cache.StartMessage(OutstandingMessage.ForParkedEvent(Helper.BuildFakeEvent(Guid.NewGuid(), "type", "$persistentsubscription-name::group-parked", 4)), DateTime.Now); Assert.AreEqual(GetStreamPositionFor(5), cache.GetLowestPosition().message?.EventPosition); }
public void lowest_retry_ignores_replayed_events() { var buffer = new StreamBuffer(10, 10, null, true); buffer.AddRetry(BuildMessageAt(4)); buffer.AddRetry(BuildMessageAt(2)); buffer.AddRetry(BuildMessageAt(3)); //add parked events buffer.AddRetry(OutstandingMessage.ForParkedEvent(Helper.BuildFakeEvent(Guid.NewGuid(), "foo", "$persistentsubscription-foo::group-parked", 1))); Assert.AreEqual(2, buffer.GetLowestRetry().sequenceNumber); }
public void adding_read_message_in_correct_order() { var buffer = new StreamBuffer(10, 10, null, true); buffer.AddReadMessage(BuildMessageAt(0)); Assert.AreEqual(1, buffer.BufferCount); OutstandingMessage message = buffer.Scan().First().Message; Assert.AreEqual(GetEventIdFor(0), message.EventId); Assert.IsFalse(buffer.Live); }
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); }
public override ConsumerPushResult PushMessageToClient(OutstandingMessage message) { for (int i = 0; i < Clients.Count; i++) { if (Clients.Peek().Push(message)) { return(ConsumerPushResult.Sent); } var c = Clients.Dequeue(); Clients.Enqueue(c); } return(ConsumerPushResult.NoMoreCapacity); }
public virtual ConsumerPushResult PushMessageToClient(OutstandingMessage message) { for (int i = 0; i < Clients.Count; i++) { var c = Clients.Dequeue(); var pushed = c.Push(message); Clients.Enqueue(c); if (pushed) { return(ConsumerPushResult.Sent); } } return(ConsumerPushResult.NoMoreCapacity); }