Example #1
0
        private EventLinkPair[] ResolveLinkToEvents(EventRecord[] records)
        {
            var resolved = new EventLinkPair[records.Length];

            for (int i = 0; i < records.Length; i++)
            {
                EventRecord eventRecord    = records[i];
                EventRecord resolvedRecord = _readIndex.ResolveLinkToEvent(eventRecord);
                resolved[i] = resolvedRecord != null
                                      ? new EventLinkPair(resolvedRecord, eventRecord)
                                      : new EventLinkPair(eventRecord, null);
            }
            return(resolved);
        }
Example #2
0
        void IHandle <ClientMessage.ReadStreamEventsForward> .Handle(ClientMessage.ReadStreamEventsForward message)
        {
            var lastCommitPosition = _readIndex.LastCommitPosition;

            EventRecord[] records;
            var           result          = _readIndex.ReadStreamEventsForward(message.EventStreamId, message.FromEventNumber, message.MaxCount, out records);
            var           nextEventNumber = result == RangeReadResult.Success && records.Length > 0
                                          ? records[records.Length - 1].EventNumber + 1
                                          : -1;

            if (result == RangeReadResult.Success && records.Length > 1)
            {
                for (var index = 1; index < records.Length; index++)
                {
                    if (records[index].EventNumber != records[index - 1].EventNumber + 1)
                    {
                        throw new Exception(string.Format(
                                                "Invalid order of events has been detected in read index for the event stream '{0}'. "
                                                + "The event {1} at position {2} goes after the event {3} at position {4}",
                                                message.EventStreamId,
                                                records[index].EventNumber,
                                                records[index].LogPosition,
                                                records[index - 1].EventNumber,
                                                records[index - 1].LogPosition));
                    }
                }
            }

            EventLinkPair[] resolvedPairs;
            if (result == RangeReadResult.Success && message.ResolveLinks)
            {
                resolvedPairs = ResolveLinkToEvents(records);
            }
            else
            {
                resolvedPairs = new EventLinkPair[records.Length];
                for (int i = 0; i < records.Length; ++i)
                {
                    resolvedPairs[i] = new EventLinkPair(records[i], null);
                }
            }

            message.Envelope.ReplyWith(
                new ClientMessage.ReadStreamEventsForwardCompleted(message.CorrelationId,
                                                                   message.EventStreamId,
                                                                   resolvedPairs,
                                                                   result,
                                                                   nextEventNumber,
                                                                   records.Length == 0 ? lastCommitPosition : (long?)null));
        }
Example #3
0
        private EventLinkPair[] ResolveLinkToEvents(EventRecord[] records, bool resolveLinks)
        {
            var resolved = new EventLinkPair[records.Length];

            if (resolveLinks)
            {
                for (int i = 0; i < records.Length; i++)
                {
                    EventRecord eventRecord    = records[i];
                    EventRecord resolvedRecord = ResolveLinkToEvent(eventRecord);
                    resolved[i] = resolvedRecord != null
                                          ? new EventLinkPair(resolvedRecord, eventRecord)
                                          : new EventLinkPair(eventRecord, null);
                }
            }
            else
            {
                for (int i = 0; i < records.Length; ++i)
                {
                    resolved[i] = new EventLinkPair(records[i], null);
                }
            }
            return(resolved);
        }
Example #4
0
 public ReadStreamEventsForwardCompleted(string eventStreamId, EventLinkPair[] events, int result, int nextEventNumber, int lastEventNumber, bool isEndOfStream, long? lastCommitPosition)
 {
     EventStreamId = eventStreamId;
     Events = events;
     Result = result;
     NextEventNumber = nextEventNumber;
     LastEventNumber = lastEventNumber;
     IsEndOfStream = isEndOfStream;
     LastCommitPosition = lastCommitPosition;
 }
Example #5
0
 public ReadAllEventsForwardCompleted(long commitPosition, long preparePosition, EventLinkPair[] events, long nextCommitPosition, long nextPreparePosition)
 {
     CommitPosition = commitPosition;
     PreparePosition = preparePosition;
     Events = events;
     NextCommitPosition = nextCommitPosition;
     NextPreparePosition = nextPreparePosition;
 }