Fix refresh at the start of a new UTC date

This commit is contained in:
Dan Paulat 2023-04-21 09:44:35 -05:00
parent 331fc84794
commit 92f2c76a70

View file

@ -50,6 +50,8 @@ public:
objects_ {}, objects_ {},
objectsMutex_ {}, objectsMutex_ {},
objectDates_ {}, objectDates_ {},
refreshMutex_ {},
refreshDate_ {},
lastModified_ {}, lastModified_ {},
updatePeriod_ {} updatePeriod_ {}
{ {
@ -78,6 +80,9 @@ public:
std::shared_mutex objectsMutex_; std::shared_mutex objectsMutex_;
std::list<std::chrono::system_clock::time_point> objectDates_; std::list<std::chrono::system_clock::time_point> objectDates_;
std::mutex refreshMutex_;
std::chrono::system_clock::time_point refreshDate_;
std::chrono::system_clock::time_point lastModified_; std::chrono::system_clock::time_point lastModified_;
std::chrono::seconds updatePeriod_; std::chrono::seconds updatePeriod_;
}; };
@ -252,27 +257,24 @@ std::pair<size_t, size_t> AwsNexradDataProvider::Refresh()
logger_->debug("Refresh()"); logger_->debug("Refresh()");
static std::mutex refreshMutex;
static system_clock::time_point refreshDate {};
auto today = floor<days>(system_clock::now()); auto today = floor<days>(system_clock::now());
auto yesterday = today - days {1}; auto yesterday = today - days {1};
std::unique_lock lock(refreshMutex); std::unique_lock lock(p->refreshMutex_);
size_t allNewObjects = 0; size_t allNewObjects = 0;
size_t allTotalObjects = 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 (p->refreshDate_ < today)
{ {
auto [newObjects, totalObjects] = ListObjects(yesterday); auto [newObjects, totalObjects] = ListObjects(yesterday);
allNewObjects = newObjects; allNewObjects = newObjects;
allTotalObjects = totalObjects; allTotalObjects = totalObjects;
if (totalObjects > 0) if (totalObjects > 0)
{ {
refreshDate = yesterday; p->refreshDate_ = yesterday;
} }
} }
@ -281,7 +283,7 @@ std::pair<size_t, size_t> AwsNexradDataProvider::Refresh()
allTotalObjects += totalObjects; allTotalObjects += totalObjects;
if (totalObjects > 0) if (totalObjects > 0)
{ {
refreshDate = today; p->refreshDate_ = today;
} }
return std::make_pair(allNewObjects, allTotalObjects); return std::make_pair(allNewObjects, allTotalObjects);