From 92f2c76a70d23f03af51afc4154569b5ac6623ee Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Fri, 21 Apr 2023 09:44:35 -0500 Subject: [PATCH] Fix refresh at the start of a new UTC date --- .../scwx/provider/aws_nexrad_data_provider.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp b/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp index 923b75fe..4d763135 100644 --- a/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp +++ b/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp @@ -50,6 +50,8 @@ public: objects_ {}, objectsMutex_ {}, objectDates_ {}, + refreshMutex_ {}, + refreshDate_ {}, lastModified_ {}, updatePeriod_ {} { @@ -78,6 +80,9 @@ public: std::shared_mutex objectsMutex_; std::list objectDates_; + std::mutex refreshMutex_; + std::chrono::system_clock::time_point refreshDate_; + std::chrono::system_clock::time_point lastModified_; std::chrono::seconds updatePeriod_; }; @@ -252,27 +257,24 @@ std::pair AwsNexradDataProvider::Refresh() logger_->debug("Refresh()"); - static std::mutex refreshMutex; - static system_clock::time_point refreshDate {}; - auto today = floor(system_clock::now()); auto yesterday = today - days {1}; - std::unique_lock lock(refreshMutex); + std::unique_lock lock(p->refreshMutex_); size_t allNewObjects = 0; size_t allTotalObjects = 0; // If we haven't gotten any objects from today, first list objects for // yesterday, to ensure we haven't missed any objects near midnight - if (refreshDate < today) + if (p->refreshDate_ < today) { auto [newObjects, totalObjects] = ListObjects(yesterday); allNewObjects = newObjects; allTotalObjects = totalObjects; if (totalObjects > 0) { - refreshDate = yesterday; + p->refreshDate_ = yesterday; } } @@ -281,7 +283,7 @@ std::pair AwsNexradDataProvider::Refresh() allTotalObjects += totalObjects; if (totalObjects > 0) { - refreshDate = today; + p->refreshDate_ = today; } return std::make_pair(allNewObjects, allTotalObjects);