mirror of
https://github.com/scylladb/scylladb.git
synced 2026-06-05 06:23:03 +00:00
commitlog_test: Add test for segment size overflow
Verifies that we include chunk overhead when calculating available space, and don't allow segments to oversize.
This commit is contained in:
@@ -340,7 +340,9 @@ public:
|
||||
|
||||
future<> oversized_allocation(entry_writer&, db::timeout_clock::time_point timeout);
|
||||
|
||||
replay_position min_position();
|
||||
replay_position min_position() const;
|
||||
replay_position current_position() const;
|
||||
size_t sector_overhead(segment_id_type, size_t) const;
|
||||
|
||||
template<typename T>
|
||||
struct byte_flow {
|
||||
@@ -1508,7 +1510,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
db::replay_position db::commitlog::segment_manager::min_position() {
|
||||
db::replay_position db::commitlog::segment_manager::min_position() const {
|
||||
if (_segments.empty()) {
|
||||
return {_ids, 0};
|
||||
} else {
|
||||
@@ -1516,6 +1518,24 @@ db::replay_position db::commitlog::segment_manager::min_position() {
|
||||
}
|
||||
}
|
||||
|
||||
db::replay_position db::commitlog::segment_manager::current_position() const {
|
||||
if (_segments.empty()) {
|
||||
return {_ids, 0};
|
||||
} else {
|
||||
auto s = _segments.front();
|
||||
return {s->_desc.id, s->position()};
|
||||
}
|
||||
}
|
||||
|
||||
size_t db::commitlog::segment_manager::sector_overhead(segment_id_type id, size_t size) const {
|
||||
for (auto& s : _segments) {
|
||||
if (s->_desc.id == id) {
|
||||
return s->sector_overhead(size);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<typename T, typename R>
|
||||
requires std::derived_from<T, db::commitlog::entry_writer> && std::same_as<R, decltype(std::declval<T>().result())>
|
||||
future<R> db::commitlog::segment_manager::allocate_when_possible(T writer, db::timeout_clock::time_point timeout) {
|
||||
@@ -3964,6 +3984,14 @@ db::replay_position db::commitlog::min_position() const {
|
||||
return _segment_manager->min_position();
|
||||
}
|
||||
|
||||
db::replay_position db::commitlog::current_position() const {
|
||||
return _segment_manager->current_position();
|
||||
}
|
||||
|
||||
size_t db::commitlog::sector_overhead(segment_id_type id, size_t size) const {
|
||||
return _segment_manager->sector_overhead(id, size);
|
||||
}
|
||||
|
||||
void db::commitlog::update_max_data_lifetime(std::optional<uint64_t> commitlog_data_max_lifetime_in_seconds) {
|
||||
_segment_manager->cfg.commitlog_data_max_lifetime_in_seconds = commitlog_data_max_lifetime_in_seconds;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user