From 7f133b75147ef34b08e30d435b603ce95ae25ff9 Mon Sep 17 00:00:00 2001 From: zhannngchen <48427519+zhannngchen@users.noreply.github.com> Date: Wed, 12 Jul 2023 21:47:07 +0800 Subject: [PATCH] [fix](partial-update) transient rowset writer should not trigger segcompaction when build rowset (#21751) --- be/src/olap/rowset/beta_rowset_writer.cpp | 38 +++++++++++++---------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp b/be/src/olap/rowset/beta_rowset_writer.cpp index a56285e8de..59999c1551 100644 --- a/be/src/olap/rowset/beta_rowset_writer.cpp +++ b/be/src/olap/rowset/beta_rowset_writer.cpp @@ -611,24 +611,28 @@ RowsetSharedPtr BetaRowsetWriter::build() { } } Status status; - status = wait_flying_segcompaction(); - if (!status.ok()) { - LOG(WARNING) << "segcompaction failed when build new rowset 1st wait, res=" << status; - return nullptr; - } - status = _segcompaction_ramaining_if_necessary(); - if (!status.ok()) { - LOG(WARNING) << "segcompaction failed when build new rowset, res=" << status; - return nullptr; - } - status = wait_flying_segcompaction(); - if (!status.ok()) { - LOG(WARNING) << "segcompaction failed when build new rowset 2nd wait, res=" << status; - return nullptr; - } + // if _segment_start_id is not zero, that means it's a transient rowset writer for + // MoW partial update, don't need to do segment compaction. + if (_segment_start_id == 0) { + status = wait_flying_segcompaction(); + if (!status.ok()) { + LOG(WARNING) << "segcompaction failed when build new rowset 1st wait, res=" << status; + return nullptr; + } + status = _segcompaction_ramaining_if_necessary(); + if (!status.ok()) { + LOG(WARNING) << "segcompaction failed when build new rowset, res=" << status; + return nullptr; + } + status = wait_flying_segcompaction(); + if (!status.ok()) { + LOG(WARNING) << "segcompaction failed when build new rowset 2nd wait, res=" << status; + return nullptr; + } - if (_segcompaction_worker.get_file_writer()) { - _segcompaction_worker.get_file_writer()->close(); + if (_segcompaction_worker.get_file_writer()) { + _segcompaction_worker.get_file_writer()->close(); + } } // When building a rowset, we must ensure that the current _segment_writer has been // flushed, that is, the current _segment_writer is nullptr