Beispiel #1
0
        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);
        }
Beispiel #3
0
        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);
        }