Skip to content

Commit fb7840e

Browse files
authored
Change the order of getting data from cache (#1325)
Change the order of getting data from cache based on level: previously the first check started from the highest value, currently from the lowest. Relates-To: OLPSUP-18351 Signed-off-by: Yevhenii Dudnyk <[email protected]>
1 parent 0862a2b commit fb7840e

File tree

3 files changed

+38
-41
lines changed

3 files changed

+38
-41
lines changed

olp-cpp-sdk-dataservice-read/src/repositories/PartitionsCacheRepository.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ client::ApiNoResponse PartitionsCacheRepository::Put(
9595
cache::KeyGenerator::CreatePartitionsKey(catalog_, layer_id_, version);
9696
OLP_SDK_LOG_DEBUG_F(kLogTag, "Put -> '%s'", key.c_str());
9797

98-
const auto put_result =
99-
cache_->Put(key, partition_ids,
100-
[&]() { return serializer::serialize(partition_ids); },
101-
expiry.get_value_or(default_expiry_));
98+
const auto put_result = cache_->Put(
99+
key, partition_ids,
100+
[&]() { return serializer::serialize(partition_ids); },
101+
expiry.get_value_or(default_expiry_));
102102

103103
if (!put_result) {
104104
OLP_SDK_LOG_ERROR_F(kLogTag, "Failed to write -> '%s'", key.c_str());
@@ -175,9 +175,9 @@ void PartitionsCacheRepository::Put(
175175
cache::KeyGenerator::CreateLayerVersionsKey(catalog_, catalog_version);
176176
OLP_SDK_LOG_DEBUG_F(kLogTag, "Put -> '%s'", key.c_str());
177177

178-
cache_->Put(key, layer_versions,
179-
[&]() { return serializer::serialize(layer_versions); },
180-
default_expiry_);
178+
cache_->Put(
179+
key, layer_versions,
180+
[&]() { return serializer::serialize(layer_versions); }, default_expiry_);
181181
}
182182

183183
boost::optional<model::LayerVersions> PartitionsCacheRepository::Get(
@@ -312,7 +312,7 @@ bool PartitionsCacheRepository::FindQuadTree(geo::TileKey key,
312312
boost::optional<int64_t> version,
313313
read::QuadTreeIndex& tree) {
314314
auto max_depth = std::min<std::uint32_t>(key.Level(), kMaxQuadTreeIndexDepth);
315-
for (auto i = 0u; i <= max_depth; ++i) {
315+
for (int32_t i = max_depth; i >= 0; i--) {
316316
const auto& root_tile_key = key.ChangedLevelBy(-i);
317317
QuadTreeIndex cached_tree;
318318
if (Get(root_tile_key, kMaxQuadTreeIndexDepth, version, cached_tree)) {

olp-cpp-sdk-dataservice-read/tests/PartitionsRepositoryTest.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,7 @@ TEST_F(PartitionsRepositoryTest, GetPartitionById) {
241241
{
242242
SCOPED_TRACE("Fetch from cache [CacheOnly] negative");
243243

244-
EXPECT_CALL(*cache, Get(cache_key, _))
245-
.WillOnce(Return(boost::any()));
244+
EXPECT_CALL(*cache, Get(cache_key, _)).WillOnce(Return(boost::any()));
246245

247246
client::CancellationContext context;
248247
auto response = repository.GetPartitionById(
@@ -372,8 +371,7 @@ TEST_F(PartitionsRepositoryTest, GetPartitionById) {
372371
"Network error 403 clears cache and is propagated to the user");
373372
setup_online_only_mocks();
374373
setup_positive_metadata_mocks();
375-
EXPECT_CALL(*cache, Get(cache_key, _))
376-
.WillOnce(Return(boost::any()));
374+
EXPECT_CALL(*cache, Get(cache_key, _)).WillOnce(Return(boost::any()));
377375

378376
EXPECT_CALL(*network,
379377
Send(IsGetRequest(kOlpSdkUrlPartitionById), _, _, _, _))
@@ -1232,13 +1230,13 @@ TEST_F(PartitionsRepositoryTest, GetTile) {
12321230
[&](const boost::optional<std::string>& root_data = boost::none) {
12331231
testing::InSequence sequence;
12341232

1235-
for (auto i = 0; i < depth; ++i) {
1233+
for (int32_t i = depth; i > 0; --i) {
12361234
EXPECT_CALL(*mock_cache,
12371235
Get(quad_cache_key(tile_key.ChangedLevelBy(-i))))
12381236
.WillOnce(Return(nullptr));
12391237
}
12401238

1241-
EXPECT_CALL(*mock_cache, Get(quad_cache_key(root)))
1239+
EXPECT_CALL(*mock_cache, Get(quad_cache_key(tile_key)))
12421240
.WillOnce(testing::WithoutArgs(
12431241
[=]() -> cache::KeyValueCache::ValueTypePtr {
12441242
if (!root_data) {

olp-cpp-sdk-dataservice-read/tests/VersionedLayerClientImplTest.cpp

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -204,24 +204,24 @@ TEST(VersionedLayerClientTest, RemoveFromCacheTileKey) {
204204

205205
EXPECT_CALL(*cache_mock, Get(_))
206206
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
207-
EXPECT_EQ(key, quad_cache_key(tile_key));
207+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-4)));
208208
return nullptr;
209209
})
210210
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
211-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-1)));
211+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-3)));
212212
return nullptr;
213213
})
214214
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
215215
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-2)));
216216
return nullptr;
217217
})
218218
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
219-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-3)));
219+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-1)));
220220
return nullptr;
221221
})
222222
.WillOnce(
223223
[&tile_key, &quad_cache_key, &buffer](const std::string& key) {
224-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-4)));
224+
EXPECT_EQ(key, quad_cache_key(tile_key));
225225
return buffer;
226226
});
227227
EXPECT_CALL(*cache_mock, RemoveKeysWithPrefix(_))
@@ -230,28 +230,27 @@ TEST(VersionedLayerClientTest, RemoveFromCacheTileKey) {
230230
.WillRepeatedly([&](const std::string&) { return true; });
231231
ASSERT_TRUE(client.RemoveFromCache(tile_key));
232232
}
233-
234233
{
235234
SCOPED_TRACE("Remove not existing tile from cache");
236235
EXPECT_CALL(*cache_mock, Get(_))
237236
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
238-
EXPECT_EQ(key, quad_cache_key(tile_key));
237+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-4)));
239238
return nullptr;
240239
})
241240
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
242-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-1)));
241+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-3)));
243242
return nullptr;
244243
})
245244
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
246245
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-2)));
247246
return nullptr;
248247
})
249248
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
250-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-3)));
249+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-1)));
251250
return nullptr;
252251
})
253252
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
254-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-4)));
253+
EXPECT_EQ(key, quad_cache_key(tile_key));
255254
return nullptr;
256255
});
257256
ASSERT_TRUE(client.RemoveFromCache(tile_key));
@@ -260,24 +259,24 @@ TEST(VersionedLayerClientTest, RemoveFromCacheTileKey) {
260259
SCOPED_TRACE("Data cache failure");
261260
EXPECT_CALL(*cache_mock, Get(_))
262261
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
263-
EXPECT_EQ(key, quad_cache_key(tile_key));
262+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-4)));
264263
return nullptr;
265264
})
266265
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
267-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-1)));
266+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-3)));
268267
return nullptr;
269268
})
270269
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
271270
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-2)));
272271
return nullptr;
273272
})
274273
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
275-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-3)));
274+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-1)));
276275
return nullptr;
277276
})
278277
.WillOnce(
279278
[&tile_key, &quad_cache_key, &buffer](const std::string& key) {
280-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-4)));
279+
EXPECT_EQ(key, quad_cache_key(tile_key));
281280
return buffer;
282281
});
283282
EXPECT_CALL(*cache_mock, RemoveKeysWithPrefix(_))
@@ -288,24 +287,24 @@ TEST(VersionedLayerClientTest, RemoveFromCacheTileKey) {
288287
SCOPED_TRACE("Successful remove tile and quad tree from cache");
289288
EXPECT_CALL(*cache_mock, Get(_))
290289
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
291-
EXPECT_EQ(key, quad_cache_key(tile_key));
290+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-4)));
292291
return nullptr;
293292
})
294293
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
295-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-1)));
294+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-3)));
296295
return nullptr;
297296
})
298297
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
299298
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-2)));
300299
return nullptr;
301300
})
302301
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
303-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-3)));
302+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-1)));
304303
return nullptr;
305304
})
306305
.WillOnce(
307306
[&tile_key, &quad_cache_key, &buffer](const std::string& key) {
308-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-4)));
307+
EXPECT_EQ(key, quad_cache_key(tile_key));
309308
return buffer;
310309
});
311310
EXPECT_CALL(*cache_mock, RemoveKeysWithPrefix(_))
@@ -319,24 +318,24 @@ TEST(VersionedLayerClientTest, RemoveFromCacheTileKey) {
319318
SCOPED_TRACE("Successful remove tile but removing quad tree fails");
320319
EXPECT_CALL(*cache_mock, Get(_))
321320
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
322-
EXPECT_EQ(key, quad_cache_key(tile_key));
321+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-4)));
323322
return nullptr;
324323
})
325324
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
326-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-1)));
325+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-3)));
327326
return nullptr;
328327
})
329328
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
330329
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-2)));
331330
return nullptr;
332331
})
333332
.WillOnce([&tile_key, &quad_cache_key](const std::string& key) {
334-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-3)));
333+
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-1)));
335334
return nullptr;
336335
})
337336
.WillOnce(
338337
[&tile_key, &quad_cache_key, &buffer](const std::string& key) {
339-
EXPECT_EQ(key, quad_cache_key(tile_key.ChangedLevelBy(-4)));
338+
EXPECT_EQ(key, quad_cache_key(tile_key));
340339
return buffer;
341340
});
342341
EXPECT_CALL(*cache_mock, RemoveKeysWithPrefix(_))
@@ -1207,12 +1206,12 @@ TEST(VersionedLayerClientTest, CacheErrorsDuringPrefetch) {
12071206

12081207
std::promise<read::PrefetchTilesResponse> promise;
12091208

1210-
auto token =
1211-
client.PrefetchTiles(request,
1212-
[&promise](read::PrefetchTilesResponse response) {
1213-
promise.set_value(std::move(response));
1214-
},
1215-
nullptr);
1209+
auto token = client.PrefetchTiles(
1210+
request,
1211+
[&promise](read::PrefetchTilesResponse response) {
1212+
promise.set_value(std::move(response));
1213+
},
1214+
nullptr);
12161215

12171216
auto future = promise.get_future();
12181217
ASSERT_NE(future.wait_for(std::chrono::seconds(kTimeout)),

0 commit comments

Comments
 (0)