mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 22:20:04 +00:00
Use a slower retry interval if no products have been recently found, keep refresh enabled if no products were found
This commit is contained in:
parent
b493a8d013
commit
3eab1405d2
1 changed files with 25 additions and 9 deletions
|
|
@ -62,7 +62,8 @@ static constexpr uint32_t NUM_COORIDNATES_1_DEGREE =
|
||||||
|
|
||||||
static const std::string kDefaultLevel3Product_ {"N0B"};
|
static const std::string kDefaultLevel3Product_ {"N0B"};
|
||||||
|
|
||||||
static constexpr std::chrono::seconds kRetryInterval_ {15};
|
static constexpr std::chrono::seconds kFastRetryInterval_ {15};
|
||||||
|
static constexpr std::chrono::seconds kSlowRetryInterval_ {120};
|
||||||
|
|
||||||
static std::unordered_map<std::string, std::weak_ptr<RadarProductManager>>
|
static std::unordered_map<std::string, std::weak_ptr<RadarProductManager>>
|
||||||
instanceMap_;
|
instanceMap_;
|
||||||
|
|
@ -638,10 +639,12 @@ void RadarProductManagerImpl::RefreshData(
|
||||||
threadPool_,
|
threadPool_,
|
||||||
[=, this]()
|
[=, this]()
|
||||||
{
|
{
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
auto [newObjects, totalObjects] =
|
auto [newObjects, totalObjects] =
|
||||||
providerManager->provider_->Refresh();
|
providerManager->provider_->Refresh();
|
||||||
|
|
||||||
std::chrono::milliseconds interval = kRetryInterval_;
|
std::chrono::milliseconds interval = kFastRetryInterval_;
|
||||||
|
|
||||||
if (totalObjects > 0)
|
if (totalObjects > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -651,12 +654,25 @@ void RadarProductManagerImpl::RefreshData(
|
||||||
|
|
||||||
auto updatePeriod = providerManager->provider_->update_period();
|
auto updatePeriod = providerManager->provider_->update_period();
|
||||||
auto lastModified = providerManager->provider_->last_modified();
|
auto lastModified = providerManager->provider_->last_modified();
|
||||||
|
auto sinceLastModified =
|
||||||
|
std::chrono::system_clock::now() - lastModified;
|
||||||
|
|
||||||
|
// For the default interval, assume products are updated at a
|
||||||
|
// constant rate. Expect the next product at a time based on the
|
||||||
|
// previous two.
|
||||||
interval = std::chrono::duration_cast<std::chrono::milliseconds>(
|
interval = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||||
updatePeriod -
|
updatePeriod - sinceLastModified);
|
||||||
(std::chrono::system_clock::now() - lastModified));
|
|
||||||
if (interval < std::chrono::milliseconds {kRetryInterval_})
|
if (updatePeriod > 0s && sinceLastModified > updatePeriod * 5)
|
||||||
{
|
{
|
||||||
interval = kRetryInterval_;
|
// If it has been at least 5 update periods since the file has
|
||||||
|
// been last modified, slow the retry period
|
||||||
|
interval = kSlowRetryInterval_;
|
||||||
|
}
|
||||||
|
else if (interval < std::chrono::milliseconds {kFastRetryInterval_})
|
||||||
|
{
|
||||||
|
// The interval should be no quicker than the fast retry interval
|
||||||
|
interval = kFastRetryInterval_;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newObjects > 0)
|
if (newObjects > 0)
|
||||||
|
|
@ -669,10 +685,10 @@ void RadarProductManagerImpl::RefreshData(
|
||||||
}
|
}
|
||||||
else if (providerManager->refreshEnabled_)
|
else if (providerManager->refreshEnabled_)
|
||||||
{
|
{
|
||||||
logger_->info("[{}] No data found, disabling refresh",
|
logger_->info("[{}] No data found", providerManager->name());
|
||||||
providerManager->name());
|
|
||||||
|
|
||||||
providerManager->refreshEnabled_ = false;
|
// If no data is found, retry at the slow retry interval
|
||||||
|
interval = kSlowRetryInterval_;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (providerManager->refreshEnabled_)
|
if (providerManager->refreshEnabled_)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue