From 893e53ea3f39db2a739d417cf572c95510ea0f2d Mon Sep 17 00:00:00 2001 From: zhengyu Date: Wed, 6 Sep 2023 12:11:13 +0800 Subject: [PATCH] [fix](segcompaction) disable segcompaction when calculating delete bitmap (#23927) Calc delete bitmap may generate segments, as a result, may trigger segcompaction. But the BetaRowsetWriter is a transient one and in Publishing context, which is bug-prone and hard to rollback. So let us disable the triggering in delete bitmap calc code path. Signed-off-by: freemandealer --- be/src/olap/rowset/beta_rowset_writer.cpp | 3 ++- be/src/olap/rowset/rowset_writer_context.h | 3 +++ be/src/olap/tablet.cpp | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp b/be/src/olap/rowset/beta_rowset_writer.cpp index ae525eed35..c79ce05cb9 100644 --- a/be/src/olap/rowset/beta_rowset_writer.cpp +++ b/be/src/olap/rowset/beta_rowset_writer.cpp @@ -354,7 +354,8 @@ bool BetaRowsetWriter::_check_and_set_is_doing_segcompaction() { Status BetaRowsetWriter::_segcompaction_if_necessary() { Status status = Status::OK(); - if (!config::enable_segcompaction || !_check_and_set_is_doing_segcompaction()) { + if (!config::enable_segcompaction || !_context.enable_segcompaction || + !_check_and_set_is_doing_segcompaction()) { return status; } if (_segcompaction_status.load() != OK) { diff --git a/be/src/olap/rowset/rowset_writer_context.h b/be/src/olap/rowset/rowset_writer_context.h index cb78a1233a..a5bb0d8e60 100644 --- a/be/src/olap/rowset/rowset_writer_context.h +++ b/be/src/olap/rowset/rowset_writer_context.h @@ -96,6 +96,9 @@ struct RowsetWriterContext { std::shared_ptr mow_context; std::shared_ptr file_writer_creator; std::shared_ptr segment_collector; + + // segcompaction for this RowsetWriter, disable it for some transient writers + bool enable_segcompaction = true; }; } // namespace doris diff --git a/be/src/olap/tablet.cpp b/be/src/olap/tablet.cpp index 3daf025bd6..6af6b6aff1 100644 --- a/be/src/olap/tablet.cpp +++ b/be/src/olap/tablet.cpp @@ -1983,6 +1983,7 @@ Status Tablet::create_transient_rowset_writer(RowsetSharedPtr rowset_ptr, context.tablet_schema->set_partial_update_info(false, std::set()); context.newest_write_timestamp = UnixSeconds(); context.tablet_id = table_id(); + context.enable_segcompaction = false; // ATTN: context.tablet is a shared_ptr, can't simply set it's value to `this`. We should // get the shared_ptr from tablet_manager. context.tablet = StorageEngine::instance()->tablet_manager()->get_tablet(tablet_id());