Exemplo n.º 1
0
        public void CompareColumnNames_EqualColumnNames()
        {
            var ts      = Timestamp.Now;
            var eventId = Guid.NewGuid();

            EventPointerFormatter.CompareColumnNames(ColumnName(ts, eventId), ColumnName(ts, eventId)).Should().Be(0);
        }
Exemplo n.º 2
0
        public void CompareColumnNames_DifferentTimestamps()
        {
            var ts      = Timestamp.Now;
            var eventId = Guid.NewGuid();

            EventPointerFormatter.CompareColumnNames(ColumnName(ts, eventId), ColumnName(ts.AddTicks(1), eventId)).Should().BeNegative();
        }
        public EventsQueryResult <TaskMetaUpdatedEvent, string> GetEvents([CanBeNull] string fromOffsetExclusive, [NotNull] string toOffsetInclusive, int estimatedCount)
        {
            if (estimatedCount <= 0)
            {
                throw new InvalidOperationException("estimatedCount <= 0");
            }
            if (string.IsNullOrEmpty(toOffsetInclusive))
            {
                throw new InvalidOperationException("toOffsetInclusive is not set");
            }

            var firstEventTicks = eventLogRepository.GetFirstEventTicks();

            if (firstEventTicks == 0)
            {
                return(new EventsQueryResult <TaskMetaUpdatedEvent, string>(new List <EventWithOffset <TaskMetaUpdatedEvent, string> >(), lastOffset: null, noMoreEventsInSource: true));
            }

            var exclusiveStartColumnName = GetExclusiveStartColumnName(fromOffsetExclusive, firstEventTicks);

            if (EventPointerFormatter.CompareColumnNames(exclusiveStartColumnName, toOffsetInclusive) >= 0)
            {
                return(new EventsQueryResult <TaskMetaUpdatedEvent, string>(new List <EventWithOffset <TaskMetaUpdatedEvent, string> >(), lastOffset: null, noMoreEventsInSource: true));
            }

            if (estimatedCount == int.MaxValue)
            {
                estimatedCount--;
            }

            var eventsToFetch = estimatedCount;
            var events        = new List <EventWithOffset <TaskMetaUpdatedEvent, string> >();
            var partitionKey  = EventPointerFormatter.GetPartitionKey(EventPointerFormatter.GetTimestamp(exclusiveStartColumnName).Ticks);

            while (true)
            {
                var eventsBatch = eventLogRepository.GetEvents(partitionKey, exclusiveStartColumnName, toOffsetInclusive, eventsToFetch, out var currentPartitionIsExhausted);
                events.AddRange(eventsBatch.Select(x => new EventWithOffset <TaskMetaUpdatedEvent, string>(x.Event, x.Offset)));

                if (!currentPartitionIsExhausted)
                {
                    return(new EventsQueryResult <TaskMetaUpdatedEvent, string>(events, lastOffset: events.Last().Offset, noMoreEventsInSource: false));
                }

                var nextPartitionStartTicks = (EventPointerFormatter.ParsePartitionKey(partitionKey) + 1) * EventPointerFormatter.PartitionDurationTicks;
                if (nextPartitionStartTicks > EventPointerFormatter.GetTimestamp(toOffsetInclusive).Ticks)
                {
                    return(new EventsQueryResult <TaskMetaUpdatedEvent, string>(events, lastOffset: toOffsetInclusive, noMoreEventsInSource: true));
                }

                eventsToFetch            = estimatedCount - events.Count;
                partitionKey             = EventPointerFormatter.GetPartitionKey(nextPartitionStartTicks);
                exclusiveStartColumnName = EventPointerFormatter.GetMaxColumnNameForTicks(nextPartitionStartTicks - 1);
            }
        }
Exemplo n.º 4
0
 public int Compare([CanBeNull] string x, [CanBeNull] string y)
 {
     if (x == null && y == null)
     {
         return(0);
     }
     if (x == null)
     {
         return(-1);
     }
     if (y == null)
     {
         return(1);
     }
     return(EventPointerFormatter.CompareColumnNames(x, y));
 }
Exemplo n.º 5
0
        public void CompareColumnNames_EqualTimestamps()
        {
            var ts = Timestamp.Now;

            EventPointerFormatter.CompareColumnNames(ColumnName(ts, minGuid), ColumnName(ts, maxGuid)).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, minGuid), ColumnName(ts, Guid.NewGuid())).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, minGuid), ColumnName(ts, Guid.Parse("a0000000-0000-0000-0000-000000000000"))).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, minGuid), ColumnName(ts, Guid.Parse("000000a0-0000-0000-0000-000000000000"))).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, minGuid), ColumnName(ts, Guid.Parse("0000000a-0000-0000-0000-000000000000"))).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, minGuid), ColumnName(ts, Guid.Parse("00000000-0000-0000-0000-00000000000a"))).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, minGuid), ColumnName(ts, Guid.Parse("f0000000-0000-0000-0000-000000000000"))).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, minGuid), ColumnName(ts, Guid.Parse("00000000-0000-0000-0000-00000000000f"))).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, Guid.NewGuid()), ColumnName(ts, maxGuid)).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, Guid.Parse("a0000000-0000-0000-0000-000000000000")), ColumnName(ts, maxGuid)).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, Guid.Parse("000000a0-0000-0000-0000-000000000000")), ColumnName(ts, maxGuid)).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, Guid.Parse("0000000a-0000-0000-0000-000000000000")), ColumnName(ts, maxGuid)).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, Guid.Parse("00000000-0000-0000-0000-00000000000a")), ColumnName(ts, maxGuid)).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, Guid.Parse("f0000000-0000-0000-0000-000000000000")), ColumnName(ts, maxGuid)).Should().BeNegative();
            EventPointerFormatter.CompareColumnNames(ColumnName(ts, Guid.Parse("00000000-0000-0000-0000-00000000000f")), ColumnName(ts, maxGuid)).Should().BeNegative();
        }