public void CompareColumnNames_EqualColumnNames() { var ts = Timestamp.Now; var eventId = Guid.NewGuid(); EventPointerFormatter.CompareColumnNames(ColumnName(ts, eventId), ColumnName(ts, eventId)).Should().Be(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); } }
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)); }
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(); }