From dd52075ff1b61559d752e019c5f97c0539e0b5aa Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Sun, 24 Feb 2019 21:57:25 +0900 Subject: [PATCH] Add backoff delay if fetching exchange rate is failing --- .../Services/Rates/BackgroundFetcherRateProvider.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/BTCPayServer/Services/Rates/BackgroundFetcherRateProvider.cs b/BTCPayServer/Services/Rates/BackgroundFetcherRateProvider.cs index e10c26687..641442e9d 100644 --- a/BTCPayServer/Services/Rates/BackgroundFetcherRateProvider.cs +++ b/BTCPayServer/Services/Rates/BackgroundFetcherRateProvider.cs @@ -16,6 +16,7 @@ namespace BTCPayServer.Services.Rates { public ExchangeRates Latest; public DateTimeOffset NextRefresh; + public TimeSpan Backoff = TimeSpan.FromSeconds(5.0); public DateTimeOffset Expiration; public Exception Exception; public string ExchangeName; @@ -90,6 +91,7 @@ namespace BTCPayServer.Services.Rates } public bool DoNotAutoFetchIfExpired { get; set; } + readonly static TimeSpan MaxBackoff = TimeSpan.FromMinutes(5.0); public async Task UpdateIfNecessary() { @@ -142,12 +144,15 @@ namespace BTCPayServer.Services.Rates { fetch.Latest = previous.Latest; fetch.Expiration = previous.Expiration; + fetch.Backoff = previous.Backoff * 2; + if (fetch.Backoff > MaxBackoff) + fetch.Backoff = MaxBackoff; } else { fetch.Expiration = DateTimeOffset.UtcNow; } - fetch.NextRefresh = DateTimeOffset.UtcNow; + fetch.NextRefresh = DateTimeOffset.UtcNow + fetch.Backoff; fetch.Exception = ex; } _Latest = fetch;