Exemple #1
0
 public void TryMarkCheckpoint(bool isTimeCheck)
 {
     lock (_lock)
     {
         var lowest = _outstandingMessages.GetLowestPosition();
         //TODO? COMPETING better to make -1? as of now we are inclusive of checkpoint.
         var lowestBufferedRetry = _streamBuffer.GetLowestRetry();
         lowest = Math.Min(lowest, lowestBufferedRetry);
         if (lowest == int.MinValue)
         {
             lowest = _lastKnownMessage;
         }
         //no outstanding messages. in this case we can say that the last known
         //event would be our checkpoint place (we have already completed it)
         var difference     = lowest - _lastCheckPoint;
         var now            = DateTime.Now;
         var timedifference = now - _lastCheckPointTime;
         if (timedifference < _settings.CheckPointAfter && difference < _settings.MaxCheckPointCount)
         {
             return;
         }
         if ((difference >= _settings.MinCheckPointCount && isTimeCheck) ||
             difference >= _settings.MaxCheckPointCount)
         {
             _lastCheckPointTime = now;
             _lastCheckPoint     = lowest;
             _settings.CheckpointWriter.BeginWriteState(lowest);
             _statistics.SetLastCheckPoint(lowest);
         }
     }
 }
        public void TryMarkCheckpoint(bool isTimeCheck)
        {
            lock (_lock) {
                var lowest = _outstandingMessages.GetLowestPosition() - 1;
                // Subtract 1 from retry and outstanding as those messages have not been processed yet.
                var lowestBufferedRetry = StreamBuffer.GetLowestRetry() - 1;
                lowest = Math.Min(lowest, lowestBufferedRetry);
                if (lowest == long.MaxValue - 1)
                {
                    lowest = _lastKnownMessage;
                }
                if (lowest == -1)
                {
                    return;
                }

                //no outstanding messages. in this case we can say that the last known
                //event would be our checkpoint place (we have already completed it)
                var difference     = lowest - _lastCheckPoint;
                var now            = DateTime.UtcNow;
                var timedifference = now - _lastCheckPointTime;
                if (timedifference < _settings.CheckPointAfter && difference < _settings.MaxCheckPointCount)
                {
                    return;
                }
                if ((difference >= _settings.MinCheckPointCount && isTimeCheck) ||
                    difference >= _settings.MaxCheckPointCount)
                {
                    _lastCheckPointTime = now;
                    _lastCheckPoint     = lowest;
                    _settings.CheckpointWriter.BeginWriteState(lowest);
                    _statistics.SetLastCheckPoint(lowest);
                }
            }
        }
 public void lowest_retry_doesnt_assume_order()
 {
     var buffer = new StreamBuffer(10, 10, -1, true);
     buffer.AddRetry(BuildMessageAt(Guid.NewGuid(), 4));
     buffer.AddRetry(BuildMessageAt(Guid.NewGuid(), 2));
     buffer.AddRetry(BuildMessageAt(Guid.NewGuid(), 3));
     Assert.AreEqual(2, buffer.GetLowestRetry());
 }