private async Task BusyWait(IEventResult result)
            {
                var desiredState = result.Results
                                   .GroupBy(r => new { r.Topic, r.Partition })
                                   .Select(g => new EventMetadata
                {
                    Topic     = g.Key.Topic,
                    Partition = g.Key.Partition,
                    Offset    = g.Max(r => r.Offset),
                })
                                   .ToList();

                _logger.Debug($"Ensuring consumer consistency, need state {string.Join(", ", desiredState)}");

                var tries = 0;

                // We need to wait for consumer to catch up
                while (desiredState.Any(s => s.Offset > GetState(s).Offset))
                {
                    if (tries >= 20)
                    {
                        throw new ConsumerOutOfSyncException($"Could not reach desired state: {string.Join(", ", desiredState)}!");
                    }

                    _logger.Debug($"Consumer lagging, waiting {tries} tries so far..");
                    await Task.Delay(200);

                    tries += 1;
                }
            }
Ejemplo n.º 2
0
        public static bool IsTimeout(this IEventResult eventResult, out DateTime dueTime)
        {
            if (eventResult is TimeoutEventResult timoutEventResult)
            {
                dueTime = timoutEventResult.DueTime;
                return(true);
            }

            dueTime = default;
            return(false);
        }
Ejemplo n.º 3
0
 public static bool IsTimeout(this IEventResult eventResult)
 {
     return(eventResult is TimeoutEventResult);
 }
Ejemplo n.º 4
0
 public static bool IsAggregateResult(this IEventResult eventResult)
 {
     return(eventResult is IAggregateEventResult);
 }