This is an automated email from the ASF dual-hosted git repository.
dataroaring 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 afd55123eab [fix](partial update) report error directly if missing
rowsets during doing alignment when flushing memtable due to compaction
(#28677)
afd55123eab is described below
commit afd55123eabc0a03bbc366a1cd52ecce72599a36
Author: bobhan1 <[email protected]>
AuthorDate: Wed Dec 20 11:49:11 2023 +0800
[fix](partial update) report error directly if missing rowsets during doing
alignment when flushing memtable due to compaction (#28677)
---
be/src/olap/rowset/beta_rowset_writer.cpp | 12 ++++++++++++
be/src/olap/rowset/segment_v2/segment_writer.cpp | 11 +++++++++++
be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp | 11 +++++++++++
3 files changed, 34 insertions(+)
diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp
b/be/src/olap/rowset/beta_rowset_writer.cpp
index 6850ce0f43c..85dd966b9ab 100644
--- a/be/src/olap/rowset/beta_rowset_writer.cpp
+++ b/be/src/olap/rowset/beta_rowset_writer.cpp
@@ -182,6 +182,18 @@ Status BetaRowsetWriter::_generate_delete_bitmap(int32_t
segment_id) {
{
std::shared_lock meta_rlock(tablet->get_header_lock());
specified_rowsets =
tablet->get_rowset_by_ids(&_context.mow_context->rowset_ids);
+ if (specified_rowsets.size() !=
_context.mow_context->rowset_ids.size()) {
+ LOG(WARNING) << fmt::format(
+ "[Memtable Flush] some rowsets have been deleted due to "
+ "compaction(specified_rowsets.size()={}, but
rowset_ids.size()={}), reset "
+ "rowset_ids to the latest value. tablet_id: {}, cur
max_version: {}, "
+ "transaction_id: {}",
+ specified_rowsets.size(),
_context.mow_context->rowset_ids.size(),
+ _context.tablet->tablet_id(),
_context.mow_context->max_version,
+ _context.mow_context->txn_id);
+ return Status::InternalError<false>(
+ "[Memtable Flush] some rowsets have been deleted due to
compaction");
+ }
}
OlapStopWatch watch;
RETURN_IF_ERROR(tablet->calc_delete_bitmap(rowset, segments,
specified_rowsets,
diff --git a/be/src/olap/rowset/segment_v2/segment_writer.cpp
b/be/src/olap/rowset/segment_v2/segment_writer.cpp
index 0b34ce3dc3f..a8f53eb3170 100644
--- a/be/src/olap/rowset/segment_v2/segment_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/segment_writer.cpp
@@ -412,6 +412,17 @@ Status
SegmentWriter::append_block_with_partial_content(const vectorized::Block*
{
std::shared_lock rlock(tablet->get_header_lock());
specified_rowsets =
tablet->get_rowset_by_ids(&_mow_context->rowset_ids);
+ if (specified_rowsets.size() != _mow_context->rowset_ids.size()) {
+ LOG(WARNING) << fmt::format(
+ "[Memtable Flush] some rowsets have been deleted due to "
+ "compaction(specified_rowsets.size()={}, but
rowset_ids.size()={}), reset "
+ "rowset_ids to the latest value. tablet_id: {}, cur
max_version: {}, "
+ "transaction_id: {}",
+ specified_rowsets.size(), _mow_context->rowset_ids.size(),
tablet->tablet_id(),
+ _mow_context->max_version, _mow_context->txn_id);
+ return Status::InternalError<false>(
+ "[Memtable Flush] some rowsets have been deleted due to
compaction");
+ }
}
std::vector<std::unique_ptr<SegmentCacheHandle>>
segment_caches(specified_rowsets.size());
// locate rows in base data
diff --git a/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp
b/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp
index 2c8e165fafd..4da71aa72a6 100644
--- a/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp
@@ -346,6 +346,17 @@ Status
VerticalSegmentWriter::_append_block_with_partial_content(RowsInBlock& da
{
std::shared_lock rlock(tablet->get_header_lock());
specified_rowsets =
tablet->get_rowset_by_ids(&_mow_context->rowset_ids);
+ if (specified_rowsets.size() != _mow_context->rowset_ids.size()) {
+ LOG(WARNING) << fmt::format(
+ "[Memtable Flush] some rowsets have been deleted due to "
+ "compaction(specified_rowsets.size()={}, but
rowset_ids.size()={}), reset "
+ "rowset_ids to the latest value. tablet_id: {}, cur
max_version: {}, "
+ "transaction_id: {}",
+ specified_rowsets.size(), _mow_context->rowset_ids.size(),
tablet->tablet_id(),
+ _mow_context->max_version, _mow_context->txn_id);
+ return Status::InternalError<false>(
+ "[Memtable Flush] some rowsets have been deleted due to
compaction");
+ }
}
std::vector<std::unique_ptr<SegmentCacheHandle>>
segment_caches(specified_rowsets.size());
// locate rows in base data
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]