Don't continue to refresh level 2 data if no data is present

This commit is contained in:
Dan Paulat 2022-05-30 10:55:52 -05:00
parent 70b8f78eb5
commit 5cfab59977
4 changed files with 21 additions and 10 deletions

View file

@ -304,7 +304,7 @@ void RadarProductManagerImpl::RefreshLevel2Data()
util::async( util::async(
[&]() [&]()
{ {
size_t newObjects = level2DataProvider_->Refresh(); auto [newObjects, totalObjects] = level2DataProvider_->Refresh();
std::chrono::milliseconds interval = kRetryInterval_; std::chrono::milliseconds interval = kRetryInterval_;
@ -325,11 +325,17 @@ void RadarProductManagerImpl::RefreshLevel2Data()
emit self_->NewLevel2DataAvailable(latestTime); emit self_->NewLevel2DataAvailable(latestTime);
} }
else if (level2DataRefreshEnabled_ && totalObjects == 0)
{
logger_->info("No level 2 data found, disabling refresh");
std::unique_lock lock(level2DataRefreshTimerMutex_); level2DataRefreshEnabled_ = false;
}
if (level2DataRefreshEnabled_) if (level2DataRefreshEnabled_)
{ {
std::unique_lock lock(level2DataRefreshTimerMutex_);
logger_->debug( logger_->debug(
"Scheduled refresh in {:%M:%S}", "Scheduled refresh in {:%M:%S}",
std::chrono::duration_cast<std::chrono::seconds>(interval)); std::chrono::duration_cast<std::chrono::seconds>(interval));

View file

@ -34,7 +34,7 @@ public:
std::pair<size_t, size_t> std::pair<size_t, size_t>
ListObjects(std::chrono::system_clock::time_point date); ListObjects(std::chrono::system_clock::time_point date);
std::shared_ptr<wsr88d::NexradFile> LoadObjectByKey(const std::string& key); std::shared_ptr<wsr88d::NexradFile> LoadObjectByKey(const std::string& key);
size_t Refresh(); std::pair<size_t, size_t> Refresh();
protected: protected:
virtual std::string virtual std::string

View file

@ -84,9 +84,11 @@ public:
* no objects have been added to the cache for the current date, the previous * no objects have been added to the cache for the current date, the previous
* date is also queried for data. * date is also queried for data.
* *
* @return New objects found * @return - New objects found
* - Total objects found
*/ */
virtual size_t Refresh() = 0;
virtual std::pair<size_t, size_t> Refresh() = 0;
/** /**
* Convert the object key to a time point. * Convert the object key to a time point.

View file

@ -237,7 +237,7 @@ AwsNexradDataProvider::LoadObjectByKey(const std::string& key)
return nexradFile; return nexradFile;
} }
size_t AwsNexradDataProvider::Refresh() std::pair<size_t, size_t> AwsNexradDataProvider::Refresh()
{ {
using namespace std::chrono; using namespace std::chrono;
@ -251,14 +251,16 @@ size_t AwsNexradDataProvider::Refresh()
std::unique_lock lock(refreshMutex); std::unique_lock lock(refreshMutex);
size_t totalNewObjects = 0; size_t allNewObjects = 0;
size_t allTotalObjects = 0;
// If we haven't gotten any objects from today, first list objects for // If we haven't gotten any objects from today, first list objects for
// yesterday, to ensure we haven't missed any objects near midnight // yesterday, to ensure we haven't missed any objects near midnight
if (refreshDate < today) if (refreshDate < today)
{ {
auto [newObjects, totalObjects] = ListObjects(yesterday); auto [newObjects, totalObjects] = ListObjects(yesterday);
totalNewObjects = newObjects; allNewObjects = newObjects;
allTotalObjects = totalObjects;
if (totalObjects > 0) if (totalObjects > 0)
{ {
refreshDate = yesterday; refreshDate = yesterday;
@ -266,13 +268,14 @@ size_t AwsNexradDataProvider::Refresh()
} }
auto [newObjects, totalObjects] = ListObjects(today); auto [newObjects, totalObjects] = ListObjects(today);
totalNewObjects += newObjects; allNewObjects += newObjects;
allTotalObjects += totalObjects;
if (totalObjects > 0) if (totalObjects > 0)
{ {
refreshDate = today; refreshDate = today;
} }
return totalNewObjects; return std::make_pair(allNewObjects, allTotalObjects);
} }
void AwsNexradDataProvider::Impl::PruneObjects() void AwsNexradDataProvider::Impl::PruneObjects()