@@ -120,7 +120,9 @@ ss::future<usage> segment::persistent_size() {
120120 * segment appender will transparently extend the size of the segment file
121121 * using fallocate, always stat the on disk size for the head partition.
122122 */
123- if (!_appender && _data_disk_usage_size.has_value ()) {
123+ if (_appender) {
124+ u.data = _appender->size_bytes ();
125+ } else if (_data_disk_usage_size.has_value ()) {
124126 u.data = _data_disk_usage_size.value ();
125127 } else {
126128 try {
@@ -139,7 +141,9 @@ ss::future<usage> segment::persistent_size() {
139141 * however, we pay for that stat() with no guarantee that the information
140142 * will be used.
141143 */
142- if (_compaction_index_size.has_value ()) {
144+ if (_compaction_index) {
145+ u.compaction = _compaction_index.value ()->size_bytes ();
146+ } else if (_compaction_index_size.has_value ()) {
143147 u.compaction = _compaction_index_size.value ();
144148 } else {
145149 auto path = reader ().path ().to_compacted_index ();
@@ -189,6 +193,14 @@ void segment::clear_cached_disk_usage() {
189193 _compaction_index_size.reset ();
190194}
191195
196+ void segment::set_cached_disk_usage (
197+ size_t new_seg_size, std::optional<size_t > new_compacted_index_size) {
198+ _data_disk_usage_size = new_seg_size;
199+ if (new_compacted_index_size.has_value ()) {
200+ _compaction_index_size = new_compacted_index_size.value ();
201+ }
202+ }
203+
192204ss::future<size_t > segment::remove_persistent_state () {
193205 vassert (is_closed (), " Cannot clear state from unclosed segment" );
194206
@@ -243,13 +255,22 @@ ss::future<> segment::do_release_appender(
243255 std::optional<std::unique_ptr<compacted_index_writer>>&
244256 compacted_index) {
245257 return appender->close ()
246- .then ([this ] { return _idx.flush (); })
247- .then ([this , &compacted_index] {
258+ .then ([this ] {
259+ clear_cached_disk_usage ();
260+ return _idx.flush ();
261+ })
262+ .then ([&compacted_index] {
248263 if (compacted_index) {
249264 return compacted_index.value ()->close ();
250265 }
251- clear_cached_disk_usage ();
252266 return ss::now ();
267+ })
268+ .then ([this , &compacted_index, &appender] {
269+ std::optional<size_t > cmp_idx_size{std::nullopt };
270+ if (compacted_index) {
271+ cmp_idx_size = compacted_index.value ()->size_bytes ();
272+ }
273+ set_cached_disk_usage (appender->size_bytes (), cmp_idx_size);
253274 });
254275 });
255276}
0 commit comments