Exemplo n.º 1
0
        private void DeliverEvent(EventStore.Core.Data.ResolvedEvent pair, float progress, ref long sequenceNumber)
        {
            EventRecord positionEvent = pair.OriginalEvent;

            if (positionEvent.EventNumber != sequenceNumber)
            {
                // This can happen when the original stream has $maxAge/$maxCount set
                _publisher.Publish(new ReaderSubscriptionMessage.Faulted(EventReaderCorrelationId, string.Format(
                                                                             "Event number {0} was expected in the stream {1}, but event number {2} was received. This may happen if events have been deleted from the beginning of your stream, please reset your projection.",
                                                                             sequenceNumber, _streamName, positionEvent.EventNumber), this.GetType()));
                return;
            }

            sequenceNumber = positionEvent.EventNumber + 1;
            var resolvedEvent = new ResolvedEvent(pair, null);

            string deletedPartitionStreamId;

            if (resolvedEvent.IsLinkToDeletedStream && !resolvedEvent.IsLinkToDeletedStreamTombstone)
            {
                return;
            }

            bool isDeletedStreamEvent =
                StreamDeletedHelper.IsStreamDeletedEventOrLinkToStreamDeletedEvent(resolvedEvent, pair.ResolveResult,
                                                                                   out deletedPartitionStreamId);

            if (isDeletedStreamEvent)
            {
                var deletedPartition = deletedPartitionStreamId;

                if (_produceStreamDeletes)
                {
                    _publisher.Publish(
                        //TODO: publish both link and event data
                        new ReaderSubscriptionMessage.EventReaderPartitionDeleted(
                            EventReaderCorrelationId, deletedPartition, source: this.GetType(), lastEventNumber: -1,
                            deleteEventOrLinkTargetPosition: null,
                            deleteLinkOrEventPosition: resolvedEvent.EventOrLinkTargetPosition,
                            positionStreamId: resolvedEvent.PositionStreamId,
                            positionEventNumber: resolvedEvent.PositionSequenceNumber));
                }
            }
            else if (!resolvedEvent.IsStreamDeletedEvent)
            {
                _publisher.Publish(
                    //TODO: publish both link and event data
                    new ReaderSubscriptionMessage.CommittedEventDistributed(
                        EventReaderCorrelationId, resolvedEvent, _stopOnEof ? (long?)null : positionEvent.LogPosition,
                        progress, source: this.GetType()));
            }
        }
Exemplo n.º 2
0
        private void DeliverEvent(EventStore.Core.Data.ResolvedEvent pair, float progress, ref int sequenceNumber)
        {
            EventRecord positionEvent = pair.OriginalEvent;

            if (positionEvent.EventNumber != sequenceNumber)
            {
                throw new InvalidOperationException(
                          string.Format(
                              "Event number {0} was expected in the stream {1}, but event number {2} was received",
                              sequenceNumber, _streamName, positionEvent.EventNumber));
            }
            sequenceNumber = positionEvent.EventNumber + 1;
            var resolvedEvent = new ResolvedEvent(pair, null);

            string deletedPartitionStreamId;

            if (resolvedEvent.IsLinkToDeletedStream && !resolvedEvent.IsLinkToDeletedStreamTombstone)
            {
                return;
            }

            bool isDeletedStreamEvent = StreamDeletedHelper.IsStreamDeletedEventOrLinkToStreamDeletedEvent(resolvedEvent, out deletedPartitionStreamId);

            if (isDeletedStreamEvent)
            {
                var deletedPartition = deletedPartitionStreamId;

                if (_produceStreamDeletes)
                {
                    _publisher.Publish(
                        //TODO: publish both link and event data
                        new ReaderSubscriptionMessage.EventReaderPartitionDeleted(
                            EventReaderCorrelationId, deletedPartition, source: this.GetType(), lastEventNumber: -1,
                            deleteEventOrLinkTargetPosition: null, deleteLinkOrEventPosition: resolvedEvent.EventOrLinkTargetPosition,
                            positionStreamId: resolvedEvent.PositionStreamId,
                            positionEventNumber: resolvedEvent.PositionSequenceNumber));
                }
            }

            else if (!resolvedEvent.IsStreamDeletedEvent)
            {
                _publisher.Publish(
                    //TODO: publish both link and event data
                    new ReaderSubscriptionMessage.CommittedEventDistributed(
                        EventReaderCorrelationId, resolvedEvent, _stopOnEof ? (long?)null : positionEvent.LogPosition,
                        progress, source: this.GetType()));
            }
        }
Exemplo n.º 3
0
            protected void DeliverEvent(float progress, ResolvedEvent resolvedEvent, TFPos position,
                                        EventStore.Core.Data.ResolvedEvent pair)
            {
                if (resolvedEvent.EventOrLinkTargetPosition <= _reader._lastEventPosition)
                {
                    return;
                }
                _reader._lastEventPosition = resolvedEvent.EventOrLinkTargetPosition;
                //TODO: this is incomplete.  where reading from TF we need to handle actual deletes

                string deletedPartitionStreamId;


                if (resolvedEvent.IsLinkToDeletedStream && !resolvedEvent.IsLinkToDeletedStreamTombstone)
                {
                    return;
                }

                bool isDeletedStreamEvent = StreamDeletedHelper.IsStreamDeletedEventOrLinkToStreamDeletedEvent(
                    resolvedEvent, pair.ResolveResult, out deletedPartitionStreamId);

                if (isDeletedStreamEvent)
                {
                    var deletedPartition = deletedPartitionStreamId;

                    if (_reader._includeDeletedStreamNotification)
                    {
                        _reader._publisher.Publish(
                            //TODO: publish both link and event data
                            new ReaderSubscriptionMessage.EventReaderPartitionDeleted(
                                _reader.EventReaderCorrelationId, deletedPartition, source: this.GetType(),
                                lastEventNumber: -1, deleteEventOrLinkTargetPosition: position,
                                deleteLinkOrEventPosition: resolvedEvent.EventOrLinkTargetPosition,
                                positionStreamId: resolvedEvent.PositionStreamId,
                                positionEventNumber: resolvedEvent.PositionSequenceNumber));
                    }
                }
                else
                {
                    _reader._publisher.Publish(
                        //TODO: publish both link and event data
                        new ReaderSubscriptionMessage.CommittedEventDistributed(
                            _reader.EventReaderCorrelationId, resolvedEvent,
                            _reader._stopOnEof ? (long?)null : position.PreparePosition, progress,
                            source: this.GetType()));
                }
            }
        private void DeliverEvent(
            EventStore.Core.Data.ResolvedEvent @event, long lastCommitPosition, TFPos currentFrom)
        {
            EventRecord linkEvent     = @event.Link;
            EventRecord targetEvent   = @event.Event ?? linkEvent;
            EventRecord positionEvent = (linkEvent ?? targetEvent);

            TFPos receivedPosition = @event.OriginalPosition.Value;

            if (currentFrom > receivedPosition)
            {
                throw new Exception(
                          string.Format(
                              "ReadFromTF returned events in incorrect order.  Last known position is: {0}.  Received position is: {1}",
                              currentFrom, receivedPosition));
            }

            var resolvedEvent = new ResolvedEvent(@event, null);

            string deletedPartitionStreamId;

            if (resolvedEvent.IsLinkToDeletedStream && !resolvedEvent.IsLinkToDeletedStreamTombstone)
            {
                return;
            }

            bool isDeletedStreamEvent = StreamDeletedHelper.IsStreamDeletedEventOrLinkToStreamDeletedEvent(
                resolvedEvent, out deletedPartitionStreamId);

            _publisher.Publish(
                new ReaderSubscriptionMessage.CommittedEventDistributed(
                    EventReaderCorrelationId,
                    resolvedEvent,
                    _stopOnEof ? (long?)null : receivedPosition.PreparePosition,
                    100.0f * positionEvent.LogPosition / lastCommitPosition,
                    source: this.GetType()));
            if (isDeletedStreamEvent)
            {
                _publisher.Publish(
                    new ReaderSubscriptionMessage.EventReaderPartitionDeleted(
                        EventReaderCorrelationId, deletedPartitionStreamId, source: this.GetType(), lastEventNumber: -1,
                        deleteEventOrLinkTargetPosition: resolvedEvent.EventOrLinkTargetPosition,
                        deleteLinkOrEventPosition: resolvedEvent.LinkOrEventPosition,
                        positionStreamId: positionEvent.EventStreamId, positionEventNumber: positionEvent.EventNumber));
            }
        }