From c5093c8048d7937a33140ce9043b07ad97f77128 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Fri, 19 Nov 2021 13:30:06 +0800 Subject: [PATCH] crimson/os/seastore: mark out empty transactions TODO: avoid write if the transaction is empty. Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/cache.cc | 5 +++++ src/crimson/os/seastore/seastore_types.cc | 2 ++ src/crimson/os/seastore/seastore_types.h | 10 ++++++++++ 3 files changed, 17 insertions(+) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index c24a1577277..57a3c8cf795 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -1095,6 +1095,11 @@ record_t Cache::prepare_record(Transaction &t) record_header_fullness.inline_stats.filled_bytes += record_size.get_raw_mdlength(); record_header_fullness.inline_stats.total_bytes += record_size.get_mdlength(); + // FIXME: prevent submitting empty records + if (record.is_empty()) { + ERRORT("record is empty!", t); + } + return record; } diff --git a/src/crimson/os/seastore/seastore_types.cc b/src/crimson/os/seastore/seastore_types.cc index 839b2cc1c3c..2901ab1a6f6 100644 --- a/src/crimson/os/seastore/seastore_types.cc +++ b/src/crimson/os/seastore/seastore_types.cc @@ -158,6 +158,8 @@ void record_group_size_t::account( const record_size_t& rsize, extent_len_t _block_size) { + // FIXME: prevent submitting empty records + // assert(!rsize.is_empty()); assert(_block_size > 0); assert(rsize.dlength % _block_size == 0); assert(block_size == 0 || block_size == _block_size); diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index bd05d227159..63582ce3d31 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -1196,6 +1196,11 @@ struct record_size_t { extent_len_t plain_mdlength = 0; // mdlength without the record header extent_len_t dlength = 0; + bool is_empty() const { + return plain_mdlength == 0 && + dlength == 0; + } + void account_extent(extent_len_t extent_len); void account(const extent_t& extent) { @@ -1235,6 +1240,11 @@ struct record_t { } } + bool is_empty() const { + return extents.size() == 0 && + deltas.size() == 0; + } + // the size of extents and delta buffers std::size_t get_raw_data_size() const { auto delta_size = std::accumulate( -- 2.39.5