This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 19eb328844e [fix](partial update) report error directly if missing
rowsets during doing alignment when flushing memtable due to compaction (#28679)
19eb328844e is described below
commit 19eb328844e24ef679ced1d49d53b4f74856aa55
Author: bobhan1 <[email protected]>
AuthorDate: Wed Dec 20 12:07:26 2023 +0800
[fix](partial update) report error directly if missing rowsets during doing
alignment when flushing memtable due to compaction (#28679)
---
be/src/olap/memtable.cpp | 11 +++++++++++
be/src/olap/rowset/segment_v2/segment_writer.cpp | 11 +++++++++++
2 files changed, 22 insertions(+)
diff --git a/be/src/olap/memtable.cpp b/be/src/olap/memtable.cpp
index ea3c0fcf6b6..22900abd83e 100644
--- a/be/src/olap/memtable.cpp
+++ b/be/src/olap/memtable.cpp
@@ -473,6 +473,17 @@ Status MemTable::_generate_delete_bitmap(int32_t
segment_id) {
{
std::shared_lock meta_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");
+ }
}
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 7ef33980b5e..c7c6a85dd7a 100644
--- a/be/src/olap/rowset/segment_v2/segment_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/segment_writer.cpp
@@ -401,6 +401,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
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]