public async Task detect_first_gap() { NumberOfStreams = 10; await PublishSingleThreaded(); await deleteEvents(NumberOfEvents - 100, NumberOfEvents - 50); var current = await _runner.Query(theGapDetector, CancellationToken.None).ConfigureAwait(false); current.ShouldBe(NumberOfEvents - 101); }
public async Task <HighWaterStatistics> DetectInSafeZone(DateTimeOffset safeTimestamp, CancellationToken token) { var statistics = await loadCurrentStatistics(token); _safeSequenceFinder.SafeTimestamp = safeTimestamp; var safeSequence = await _runner.Query(_safeSequenceFinder, token); if (safeSequence.HasValue) { statistics.SafeStartMark = safeSequence.Value; } await calculateHighWaterMark(statistics, token); return(statistics); }
public async Task <HighWaterStatistics> DetectInSafeZone(CancellationToken token) { var statistics = await loadCurrentStatistics(token).ConfigureAwait(false); // Skip gap and find next safe sequence _gapDetector.Start = statistics.SafeStartMark + 1; var safeSequence = await _runner.Query(_gapDetector, token).ConfigureAwait(false); _logger.LogInformation("Daemon projection high water detection skipping a gap in event sequence, determined that the 'safe harbor' sequence is at {SafeHarborSequence}", safeSequence); if (safeSequence.HasValue) { statistics.SafeStartMark = safeSequence.Value; } await calculateHighWaterMark(statistics, token).ConfigureAwait(false); return(statistics); }