From bbbc4aafeffadfc6174c5bb001996233e083fb28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Chojnowski?= Date: Wed, 5 Jul 2023 12:34:31 +0200 Subject: [PATCH] view_updating_consumer: make buffer limit a variable The limit doesn't change at runtime, but we this patch makes it variable for unit testing purposes. --- db/view/view.cc | 5 +---- db/view/view_updating_consumer.hh | 15 ++++++++++++--- test/boost/view_build_test.cc | 4 ++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/db/view/view.cc b/db/view/view.cc index 5411a0f81a..04f67aeb20 100644 --- a/db/view/view.cc +++ b/db/view/view.cc @@ -2569,9 +2569,6 @@ future check_needs_view_update_path(db::system_distributed_keyspace& sys_d }); } -const size_t view_updating_consumer::buffer_size_soft_limit{1 * 1024 * 1024}; -const size_t view_updating_consumer::buffer_size_hard_limit{2 * 1024 * 1024}; - void view_updating_consumer::do_flush_buffer() { _staging_reader_handle.pause(); @@ -2606,7 +2603,7 @@ void view_updating_consumer::end_builder() { } void view_updating_consumer::maybe_flush_buffer_mid_partition() { - if (_buffer_size >= buffer_size_hard_limit) { + if (_buffer_size >= _buffer_size_hard_limit) { flush_builder(); do_flush_buffer(); } diff --git a/db/view/view_updating_consumer.hh b/db/view/view_updating_consumer.hh index 00b7373358..6070846920 100644 --- a/db/view/view_updating_consumer.hh +++ b/db/view/view_updating_consumer.hh @@ -35,8 +35,17 @@ public: // We prefer flushing on partition boundaries, so at the end of a partition, // we flush on reaching the soft limit. Otherwise we continue accumulating // data. We flush mid-partition if we reach the hard limit. - static const size_t buffer_size_soft_limit; - static const size_t buffer_size_hard_limit; + static constexpr size_t buffer_size_soft_limit_default = 1 * 1024 * 1024; + static constexpr size_t buffer_size_hard_limit_default = 2 * 1024 * 1024; +private: + size_t _buffer_size_soft_limit = buffer_size_soft_limit_default; + size_t _buffer_size_hard_limit = buffer_size_hard_limit_default; +public: + // Meant only for usage in tests. + void set_buffer_size_limit_for_testing_purposes(size_t sz) { + _buffer_size_soft_limit = sz; + _buffer_size_hard_limit = sz; + } private: schema_ptr _schema; @@ -117,7 +126,7 @@ public: return stop_iteration::yes; } end_builder(); - if (_buffer_size >= buffer_size_soft_limit) { + if (_buffer_size >= _buffer_size_soft_limit) { do_flush_buffer(); } return stop_iteration::no; diff --git a/test/boost/view_build_test.cc b/test/boost/view_build_test.cc index b7258263b5..2180625964 100644 --- a/test/boost/view_build_test.cc +++ b/test/boost/view_build_test.cc @@ -783,8 +783,8 @@ SEASTAR_THREAD_TEST_CASE(test_view_update_generator_buffering) { , _rl(std::make_unique(_schema)) , _rl_stats(std::make_unique()) , _less_cmp(*_schema) - , _max_rows_soft(rows_in_limit(db::view::view_updating_consumer::buffer_size_soft_limit)) - , _max_rows_hard(rows_in_limit(db::view::view_updating_consumer::buffer_size_hard_limit)) + , _max_rows_soft(rows_in_limit(db::view::view_updating_consumer::buffer_size_soft_limit_default)) + , _max_rows_hard(rows_in_limit(db::view::view_updating_consumer::buffer_size_hard_limit_default)) , _ok(ok) { }