You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2023/06/01 01:06:59 UTC
[doris] branch master updated: [fix](checksum) delete predicates might be inconsistent with rowset readers in checksum task (#20251)
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 <li...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org