/// <inheritdoc/> protected override Task <IStreamProcessorState> OnRetryProcessingResult(FailedProcessing failedProcessing, StreamEvent processedEvent, IStreamProcessorState currentState) => _failingPartitions.AddFailingPartitionFor( Identifier, currentState as StreamProcessorState, processedEvent.Position, processedEvent.Partition, DateTimeOffset.UtcNow.Add(failedProcessing.RetryTimeout), failedProcessing.FailureReason, CancellationToken.None);
/// <inheritdoc/> protected override async Task <IStreamProcessorState> OnRetryProcessingResult(FailedProcessing failedProcessing, StreamEvent processedEvent, IStreamProcessorState currentState) { var oldState = currentState as StreamProcessorState; var newState = new StreamProcessorState( oldState.Position, failedProcessing.FailureReason, DateTimeOffset.UtcNow.Add(failedProcessing.RetryTimeout), oldState.ProcessingAttempts + 1, oldState.LastSuccessfullyProcessed, true); await _streamProcessorStates.Persist(Identifier, newState, CancellationToken.None).ConfigureAwait(false); return(newState); }
/// <summary> /// Gets the new <see cref="IStreamProcessorState" /> after hanling the event of a <see cref="IProcessingResult" /> that signifies that the <see cref="StreamEvent" /> should not be processed again. /// </summary> /// <param name="failedProcessing">The <see cref="FailedProcessing" /> <see cref="IProcessingResult" />.</param> /// <param name="processedEvent">The <see cref="StreamEvent" /> that was processed.</param> /// <param name="currentState">The current <see cref="IStreamProcessorState" />.</param> /// <returns>A <see cref="Task" /> that, when resolved, returns the new <see cref="IStreamProcessorState" />.</returns> protected abstract Task <IStreamProcessorState> OnFailedProcessingResult(FailedProcessing failedProcessing, StreamEvent processedEvent, IStreamProcessorState currentState);