namespace crimson::os::seastore {
Cache::Cache(
- ExtentReader &reader,
- segment_off_t block_size)
- : reader(reader),
- block_size(block_size)
+ ExtentReader &reader)
+ : reader(reader)
{
register_metrics();
}
record_header_fullness.ool_stats.total_bytes += ool_stats.header_bytes;
auto record_size = get_encoded_record_length(
- record, block_size);
+ record, reader.get_block_size());
auto inline_overhead =
record_size.mdlength + record_size.dlength - record.get_raw_data_size();
efforts.inline_record_overhead_bytes += inline_overhead;
crimson::ct_error::input_output_error>;
using base_iertr = trans_iertr<base_ertr>;
- Cache(ExtentReader &reader, segment_off_t block_size);
+ Cache(ExtentReader &reader);
~Cache();
/// Creates empty transaction by source
private:
ExtentReader &reader; ///< ref to extent reader
- segment_off_t block_size; ///< block size of the segment
- ///< manager holding journal records
RootBlockRef root; ///< ref to current root
ExtentIndex extents; ///< set of live extents
class ExtentReader {
public:
+ segment_off_t get_block_size() const {
+ assert(segment_managers.size());
+ // assume all segment managers have the same block size
+ return segment_managers[0]->get_block_size();
+ }
+
using read_ertr = SegmentManager::read_ertr;
ExtentReader() {
segment_managers.resize(DEVICE_ID_MAX, nullptr);
false /* detailed */);
auto journal = std::make_unique<Journal>(*sm, scanner_ref);
- auto cache = std::make_unique<Cache>(scanner_ref, sm->get_block_size());
+ auto cache = std::make_unique<Cache>(scanner_ref);
auto lba_manager = lba_manager::create_lba_manager(*sm, *cache);
auto epm = std::make_unique<ExtentPlacementManager>(*cache, *lba_manager);
std::vector<SegmentManager*> sms;
segment_cleaner->mount(segment_manager->get_device_id(), sms);
auto journal = std::make_unique<Journal>(*segment_manager, scanner_ref);
- auto cache = std::make_unique<Cache>(scanner_ref, segment_manager->get_block_size());
+ auto cache = std::make_unique<Cache>(scanner_ref);
auto lba_manager = lba_manager::create_lba_manager(*segment_manager, *cache);
auto epm = std::make_unique<ExtentPlacementManager>(*cache, *lba_manager);
: segment_manager(segment_manager::create_test_ephemeral()),
scanner(new ExtentReader()),
journal(*segment_manager, *scanner),
- cache(*scanner, segment_manager->get_block_size()),
+ cache(*scanner),
block_size(segment_manager->get_block_size()),
next(segment_manager->get_device_id(), 0)
{
rbm_test_t() :
segment_manager(segment_manager::create_test_ephemeral()),
reader(new ExtentReader()),
- cache(*reader, segment_manager->get_block_size())
+ cache(*reader)
{
reader->add_segment_manager(segment_manager.get());
device = new nvme_device::TestMemory(DEFAULT_TEST_SIZE);
cache_test_t()
: segment_manager(segment_manager::create_test_ephemeral()),
reader(new ExtentReader()),
- cache(*reader, segment_manager->get_block_size()),
+ cache(*reader),
current(segment_id_t(segment_manager->get_device_id(), 0), 0) {
reader->add_segment_manager(segment_manager.get());
}
std::move(scanner),
true);
auto journal = std::make_unique<Journal>(segment_manager, scanner_ref);
- auto cache = std::make_unique<Cache>(scanner_ref, segment_manager.get_block_size());
+ auto cache = std::make_unique<Cache>(scanner_ref);
auto lba_manager = lba_manager::create_lba_manager(segment_manager, *cache);
auto epm = std::make_unique<ExtentPlacementManager>(*cache, *lba_manager);