mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 17:30:05 +00:00 
			
		
		
		
	Returning new objects from Refresh() function
This commit is contained in:
		
							parent
							
								
									b7aeecfe83
								
							
						
					
					
						commit
						df3d65e8aa
					
				
					 3 changed files with 25 additions and 12 deletions
				
			
		|  | @ -48,8 +48,9 @@ TEST(AwsLevel2DataProvider, Refresh) | ||||||
| { | { | ||||||
|    AwsLevel2DataProvider provider("KLSX"); |    AwsLevel2DataProvider provider("KLSX"); | ||||||
| 
 | 
 | ||||||
|    provider.Refresh(); |    size_t newObjects = provider.Refresh(); | ||||||
| 
 | 
 | ||||||
|  |    EXPECT_GT(newObjects, 0); | ||||||
|    EXPECT_GT(provider.cache_size(), 0); |    EXPECT_GT(provider.cache_size(), 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -31,9 +31,10 @@ public: | ||||||
|    size_t cache_size() const; |    size_t cache_size() const; | ||||||
| 
 | 
 | ||||||
|    std::string FindKey(std::chrono::system_clock::time_point time); |    std::string FindKey(std::chrono::system_clock::time_point time); | ||||||
|    size_t      ListObjects(std::chrono::system_clock::time_point date); |    std::pair<size_t, size_t> | ||||||
|  |    ListObjects(std::chrono::system_clock::time_point date); | ||||||
|    std::shared_ptr<wsr88d::Ar2vFile> LoadObjectByKey(const std::string& key); |    std::shared_ptr<wsr88d::Ar2vFile> LoadObjectByKey(const std::string& key); | ||||||
|    void                              Refresh(); |    size_t                            Refresh(); | ||||||
| 
 | 
 | ||||||
|    static std::chrono::system_clock::time_point |    static std::chrono::system_clock::time_point | ||||||
|    GetTimePointFromKey(const std::string& key); |    GetTimePointFromKey(const std::string& key); | ||||||
|  |  | ||||||
|  | @ -98,7 +98,7 @@ AwsLevel2DataProvider::FindKey(std::chrono::system_clock::time_point time) | ||||||
|    return key; |    return key; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| size_t | std::pair<size_t, size_t> | ||||||
| AwsLevel2DataProvider::ListObjects(std::chrono::system_clock::time_point date) | AwsLevel2DataProvider::ListObjects(std::chrono::system_clock::time_point date) | ||||||
| { | { | ||||||
|    const std::string prefix = |    const std::string prefix = | ||||||
|  | @ -112,6 +112,7 @@ AwsLevel2DataProvider::ListObjects(std::chrono::system_clock::time_point date) | ||||||
| 
 | 
 | ||||||
|    auto outcome = p->client_->ListObjectsV2(request); |    auto outcome = p->client_->ListObjectsV2(request); | ||||||
| 
 | 
 | ||||||
|  |    size_t newObjects   = 0; | ||||||
|    size_t totalObjects = 0; |    size_t totalObjects = 0; | ||||||
| 
 | 
 | ||||||
|    if (outcome.IsSuccess()) |    if (outcome.IsSuccess()) | ||||||
|  | @ -133,7 +134,13 @@ AwsLevel2DataProvider::ListObjects(std::chrono::system_clock::time_point date) | ||||||
| 
 | 
 | ||||||
|                           std::unique_lock lock(p->objectsMutex_); |                           std::unique_lock lock(p->objectsMutex_); | ||||||
| 
 | 
 | ||||||
|                           p->objects_[time] = key; |                           auto [it, inserted] = | ||||||
|  |                              p->objects_.insert_or_assign(time, key); | ||||||
|  | 
 | ||||||
|  |                           if (inserted) | ||||||
|  |                           { | ||||||
|  |                              newObjects++; | ||||||
|  |                           } | ||||||
| 
 | 
 | ||||||
|                           totalObjects++; |                           totalObjects++; | ||||||
|                        } |                        } | ||||||
|  | @ -145,7 +152,7 @@ AwsLevel2DataProvider::ListObjects(std::chrono::system_clock::time_point date) | ||||||
|                     outcome.GetError().GetMessage()); |                     outcome.GetError().GetMessage()); | ||||||
|    } |    } | ||||||
| 
 | 
 | ||||||
|    return totalObjects; |    return std::make_pair(newObjects, totalObjects); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::shared_ptr<wsr88d::Ar2vFile> | std::shared_ptr<wsr88d::Ar2vFile> | ||||||
|  | @ -177,7 +184,7 @@ AwsLevel2DataProvider::LoadObjectByKey(const std::string& key) | ||||||
|    return level2File; |    return level2File; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void AwsLevel2DataProvider::Refresh() | size_t AwsLevel2DataProvider::Refresh() | ||||||
| { | { | ||||||
|    using namespace std::chrono; |    using namespace std::chrono; | ||||||
| 
 | 
 | ||||||
|  | @ -191,24 +198,28 @@ void AwsLevel2DataProvider::Refresh() | ||||||
| 
 | 
 | ||||||
|    std::unique_lock lock(refreshMutex); |    std::unique_lock lock(refreshMutex); | ||||||
| 
 | 
 | ||||||
|    size_t objectCount; |    size_t totalNewObjects = 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) | ||||||
|    { |    { | ||||||
|       objectCount = ListObjects(yesterday); |       auto [newObjects, totalObjects] = ListObjects(yesterday); | ||||||
|       if (objectCount > 0) |       totalNewObjects                 = newObjects; | ||||||
|  |       if (totalObjects > 0) | ||||||
|       { |       { | ||||||
|          refreshDate = yesterday; |          refreshDate = yesterday; | ||||||
|       } |       } | ||||||
|    } |    } | ||||||
| 
 | 
 | ||||||
|    objectCount = ListObjects(today); |    auto [newObjects, totalObjects] = ListObjects(today); | ||||||
|    if (objectCount > 0) |    totalNewObjects += newObjects; | ||||||
|  |    if (totalObjects > 0) | ||||||
|    { |    { | ||||||
|       refreshDate = today; |       refreshDate = today; | ||||||
|    } |    } | ||||||
|  | 
 | ||||||
|  |    return totalNewObjects; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::chrono::system_clock::time_point | std::chrono::system_clock::time_point | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat