This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 09e6b6580f [fix](checksum) delete predicates might be inconsistent with rowset readers in checksum task (#20251) 09e6b6580f is described below commit 09e6b6580f97f30e32f296f44f0161edf8d84c43 Author: Xin Liao <liaoxin...@126.com> AuthorDate: Thu Jun 1 09:06:51 2023 +0800 [fix](checksum) delete predicates might be inconsistent with rowset readers in checksum task (#20251) The BlockReader capture rowsets and init delete_handler in different place. If there is a base compaction, it may result in obtaining inconsistent delete handlers. Therefore, place these two operations under the same lock. --- be/src/olap/reader.cpp | 13 ++++++------- be/src/olap/task/engine_checksum_task.cpp | 23 +++++++++++++---------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/be/src/olap/reader.cpp b/be/src/olap/reader.cpp index a0e9b989c1..82274c1d09 100644 --- a/be/src/olap/reader.cpp +++ b/be/src/olap/reader.cpp @@ -643,13 +643,12 @@ Status TabletReader::init_reader_params_and_create_block( tablet->rowset_meta_with_max_schema_version(rowset_metas)->tablet_schema(); TabletSchemaSPtr merge_tablet_schema = std::make_shared<TabletSchema>(); merge_tablet_schema->copy_from(*read_tablet_schema); - { - std::shared_lock rdlock(tablet->get_header_lock()); - auto& delete_preds = tablet->delete_predicates(); - std::copy(delete_preds.cbegin(), delete_preds.cend(), - std::inserter(reader_params->delete_predicates, - reader_params->delete_predicates.begin())); - } + + auto& delete_preds = tablet->delete_predicates(); + std::copy(delete_preds.cbegin(), delete_preds.cend(), + std::inserter(reader_params->delete_predicates, + reader_params->delete_predicates.begin())); + // Merge the columns in delete predicate that not in latest schema in to current tablet schema for (auto& del_pred_pb : reader_params->delete_predicates) { merge_tablet_schema->merge_dropped_columns(tablet->tablet_schema(del_pred_pb->version())); diff --git a/be/src/olap/task/engine_checksum_task.cpp b/be/src/olap/task/engine_checksum_task.cpp index 645027dafa..614802e1f0 100644 --- a/be/src/olap/task/engine_checksum_task.cpp +++ b/be/src/olap/task/engine_checksum_task.cpp @@ -71,21 +71,24 @@ Status EngineChecksumTask::_compute_checksum() { std::vector<RowsetSharedPtr> input_rowsets; Version version(0, _version); - Status acquire_reader_st = tablet->capture_consistent_rowsets(version, &input_rowsets); - if (acquire_reader_st != Status::OK()) { - LOG(WARNING) << "fail to captute consistent rowsets. tablet=" << tablet->full_name() - << "res=" << acquire_reader_st; - return acquire_reader_st; + vectorized::BlockReader reader; + TabletReader::ReaderParams reader_params; + vectorized::Block block; + { + std::shared_lock rdlock(tablet->get_header_lock()); + Status acquire_reader_st = tablet->capture_consistent_rowsets(version, &input_rowsets); + if (acquire_reader_st != Status::OK()) { + LOG(WARNING) << "fail to captute consistent rowsets. tablet=" << tablet->full_name() + << "res=" << acquire_reader_st; + return acquire_reader_st; + } + RETURN_IF_ERROR(TabletReader::init_reader_params_and_create_block( + tablet, ReaderType::READER_CHECKSUM, input_rowsets, &reader_params, &block)); } size_t input_size = 0; for (const auto& rowset : input_rowsets) { input_size += rowset->data_disk_size(); } - vectorized::BlockReader reader; - TabletReader::ReaderParams reader_params; - vectorized::Block block; - RETURN_IF_ERROR(TabletReader::init_reader_params_and_create_block( - tablet, ReaderType::READER_CHECKSUM, input_rowsets, &reader_params, &block)); auto res = reader.init(reader_params); if (!res.ok()) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org