private async Task <FilterLog[]> RetrieveLogsAsync( BlockRange range, NewFilterInput filter, uint retryNumber = 0) { try { filter.SetBlockRange(range); _logger.RetrievingLogs(filter, range, retryNumber); return(await _eventLogProxy.SendRequestAsync(filter).ConfigureAwait(false)); } catch (RpcResponseException rpcResponseEx) when(rpcResponseEx.TooManyRecords()) { _logger.TooManyRecords(range, rpcResponseEx); throw rpcResponseEx.TooManyRecordsException(); } catch (Exception ex) { _logger.RetrievalError(range, ex); retryNumber++; if (retryNumber < MaxRetries) { _logger.PausingBeforeRetry(range, retryNumber); await RetryWaitStrategy.Apply(retryNumber).ConfigureAwait(false); return(await RetrieveLogsAsync(range, filter, retryNumber) .ConfigureAwait(false)); } _logger.MaxRetriesExceededSoThrowing(MaxRetries, ex); throw; } }
private async Task <GetLogsResponse?> GetLogsAsync(OrchestrationProgress progress, BigInteger fromBlock, BigInteger toBlock, int retryRequestNumber = 0, int retryNullLogsRequestNumber = 0) { try { var adjustedToBlock = _blockRangeRequestStrategy.GeBlockNumberToRequestTo(fromBlock, toBlock, retryRequestNumber); _filterInput.SetBlockRange(fromBlock, adjustedToBlock); var logs = await EthApi.Filters.GetLogs.SendRequestAsync(_filterInput).ConfigureAwait(false); //If we don't get any, lets retry in case there is an issue with the node. if (logs == null && retryNullLogsRequestNumber < MaxGetLogsNullRetries) { return(await GetLogsAsync(progress, fromBlock, toBlock, 0, retryNullLogsRequestNumber + 1).ConfigureAwait(false)); } retryRequestNumber = 0; retryNullLogsRequestNumber = 0; return(new GetLogsResponse(fromBlock, adjustedToBlock, logs)); } catch (Exception ex) { if (retryRequestNumber >= MaxGetLogsRetries) { progress.Exception = ex; return(null); } else { return(await GetLogsAsync(progress, fromBlock, toBlock, retryRequestNumber + 1).ConfigureAwait(false)); } } }
private async Task <GetLogsResponse?> GetLogsAsync(OrchestrationProgress progress, BigInteger fromBlock, BigInteger toBlock, int retryRequestNumber = 0) { try { var adjustedToBlock = _blockRangeRequestStrategy.GeBlockNumberToRequestTo(fromBlock, toBlock, retryRequestNumber); _filterInput.SetBlockRange(fromBlock, adjustedToBlock); var logs = await EthApi.Filters.GetLogs.SendRequestAsync(_filterInput).ConfigureAwait(false); return(new GetLogsResponse(fromBlock, adjustedToBlock, logs)); } catch (Exception ex) { if (retryRequestNumber >= MaxGetLogsRetries) { progress.Exception = ex; return(null); } else { return(await GetLogsAsync(progress, fromBlock, toBlock, retryRequestNumber + 1).ConfigureAwait(false)); } } }
private async Task <FilterLog[]> RetrieveLogsAsync( BlockRange range, NewFilterInput filter, uint retryNumber = 0) { try { filter.SetBlockRange(range); _log.LogInformation($"RetrieveLogsAsync - getting logs. RetryNumber:{retryNumber}, from:{range.From}, to:{range.To}."); return(await _eventLogProxy.GetLogs(filter).ConfigureAwait(false)); } catch (Exception ex) { _log.LogError("Get Logs Error", ex); retryNumber++; if (retryNumber < MaxRetries) { _log.LogInformation("Pausing before retry get logs"); await RetryWaitStrategy.Apply(retryNumber).ConfigureAwait(false); _log.LogInformation("Retrying get logs"); return(await RetrieveLogsAsync(range, filter, retryNumber) .ConfigureAwait(false)); } _log.LogError("MaxRetries exceeded when getting logs, throwing exception.", ex); throw; } }