|
12 | 12 | #include "cloud_storage/types.h" |
13 | 13 | #include "cloud_topics/data_plane_api.h" |
14 | 14 | #include "cloud_topics/frontend/errc.h" |
| 15 | +#include "cloud_topics/level_one/frontend_reader/l1_reader_cache.h" |
15 | 16 | #include "cloud_topics/level_one/frontend_reader/level_one_reader.h" |
16 | 17 | #include "cloud_topics/level_one/metastore/metastore.h" |
17 | 18 | #include "cloud_topics/level_zero/common/extent_meta.h" |
@@ -287,8 +288,7 @@ frontend::make_reader(cloud_topic_log_reader_config cfg) { |
287 | 288 | if (!tidp) { |
288 | 289 | throw topic_config_not_found_exception(ntp()); |
289 | 290 | } |
290 | | - co_return storage::translating_reader{ |
291 | | - model::record_batch_reader(make_l1_reader(cfg, *tidp))}; |
| 291 | + co_return storage::translating_reader{make_l1_reader(cfg, *tidp)}; |
292 | 292 | } |
293 | 293 | co_return storage::translating_reader{ |
294 | 294 | model::record_batch_reader(make_l0_reader(cfg)), |
@@ -387,23 +387,28 @@ ss::future<size_t> frontend::size_bytes() { |
387 | 387 | co_return l0_size + l1_size_res.value().size; |
388 | 388 | } |
389 | 389 |
|
390 | | -std::unique_ptr<model::record_batch_reader::impl> frontend::make_l1_reader( |
| 390 | +model::record_batch_reader frontend::make_l1_reader( |
391 | 391 | const cloud_topic_log_reader_config& cfg, |
392 | 392 | model::topic_id_partition tidp) const { |
393 | 393 | auto ct_state = _partition->get_cloud_topics_state(); |
| 394 | + auto* cache = ct_state->local().get_l1_reader_cache(); |
| 395 | + if (cache) { |
| 396 | + if (auto hit = cache->get_reader(tidp, cfg); hit) { |
| 397 | + return std::move(*hit); |
| 398 | + } |
| 399 | + } |
| 400 | + |
394 | 401 | auto l1_metastore = ct_state->local().get_l1_metastore(); |
395 | 402 | auto l1_io = ct_state->local().get_l1_io(); |
396 | 403 | auto l1_reader_probe = ct_state->local().get_l1_reader_probe(); |
397 | | - auto l1_cache = ct_state->local().get_l1_reader_cache(); |
398 | 404 |
|
399 | | - return std::make_unique<level_one_log_reader_impl>( |
400 | | - cfg, |
401 | | - _partition->ntp(), |
402 | | - tidp, |
403 | | - l1_metastore, |
404 | | - l1_io, |
405 | | - l1_reader_probe, |
406 | | - l1_cache); |
| 405 | + auto reader = std::make_unique<level_one_log_reader_impl>( |
| 406 | + cfg, _partition->ntp(), tidp, l1_metastore, l1_io, l1_reader_probe); |
| 407 | + |
| 408 | + if (cache) { |
| 409 | + return cache->put(std::move(reader)); |
| 410 | + } |
| 411 | + return model::record_batch_reader(std::move(reader)); |
407 | 412 | } |
408 | 413 |
|
409 | 414 | ss::future<std::optional<storage::timequery_result>> |
|
0 commit comments