public async void WorkerError(HttpWorkerErrorEvent workerError) { if (!_disposing) { _logger.LogDebug("Handling WorkerErrorEvent for workerId:{workerId}", workerError.WorkerId); AddOrUpdateErrorBucket(workerError); await DisposeAndRestartWorkerChannel(workerError.WorkerId); } }
private void AddOrUpdateErrorBucket(HttpWorkerErrorEvent currentErrorEvent) { if (_invokerErrors.TryPeek(out HttpWorkerErrorEvent top)) { if ((currentErrorEvent.CreatedAt - top.CreatedAt) > thresholdBetweenRestarts) { while (!_invokerErrors.IsEmpty) { _invokerErrors.TryPop(out HttpWorkerErrorEvent popped); _logger.LogDebug($"Popping out errorEvent createdAt:{popped.CreatedAt} workerId:{popped.WorkerId}"); } } } _invokerErrors.Push(currentErrorEvent); }