This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new dcecaf0c371 branch-4.0: Revert "[Fix](mow) seg compaction should wait
for calc delete bitmap tasks on input segments before converting delete bitmaps
on them (#53198)" (#58855)
dcecaf0c371 is described below
commit dcecaf0c3715f4f5722aad596c3c328c3c3350b6
Author: bobhan1 <[email protected]>
AuthorDate: Tue Dec 9 17:15:10 2025 +0800
branch-4.0: Revert "[Fix](mow) seg compaction should wait for calc delete
bitmap tasks on input segments before converting delete bitmaps on them
(#53198)" (#58855)
This reverts commit 9b6115d7c9675c4d1ead8f063e26f9d27e8e1ded.
### What problem does this PR solve?
Issue Number: close #xxx
Related PR: #xxx
Problem Summary:
### Release note
None
### Check List (For Author)
- Test <!-- At least one of them must be included. -->
- [ ] Regression test
- [ ] Unit Test
- [ ] Manual test (add detailed scripts or steps below)
- [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
- [ ] Previous test can cover this change.
- [ ] No code files have been changed.
- [ ] Other reason <!-- Add your reason? -->
- Behavior changed:
- [ ] No.
- [ ] Yes. <!-- Explain the behavior change -->
- Does this need documentation?
- [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
https://github.com/apache/doris-website/pull/1214 -->
### Check List (For Reviewer who merge this PR)
- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
---
be/src/common/config.cpp | 2 -
be/src/common/config.h | 2 -
be/src/olap/base_tablet.cpp | 24 ++---
be/src/olap/base_tablet.h | 15 ++-
be/src/olap/calc_delete_bitmap_executor.cpp | 16 ++--
be/src/olap/calc_delete_bitmap_executor.h | 3 +-
be/src/olap/olap_common.h | 36 -------
be/src/olap/rowset/beta_rowset_writer.cpp | 22 ++---
be/src/olap/rowset/beta_rowset_writer.h | 8 +-
be/src/olap/rowset/segcompaction.cpp | 40 ++------
be/src/olap/rowset/segcompaction.h | 11 +--
be/test/olap/segcompaction_mow_test.cpp | 20 ----
.../test_mow_seq_seg_compaction.out | 23 -----
.../test_mow_seq_seg_compaction.groovy | 103 ---------------------
14 files changed, 41 insertions(+), 284 deletions(-)
diff --git a/be/src/common/config.cpp b/be/src/common/config.cpp
index 7a184b7e5c4..b38c05e5cab 100644
--- a/be/src/common/config.cpp
+++ b/be/src/common/config.cpp
@@ -1068,8 +1068,6 @@ DEFINE_Int64(segcompaction_task_max_bytes, "157286400");
// Global segcompaction thread pool size.
DEFINE_mInt32(segcompaction_num_threads, "5");
-DEFINE_mInt32(segcompaction_wait_for_dbm_task_timeout_s, "3600"); // 1h
-
// enable java udf and jdbc scannode
DEFINE_Bool(enable_java_support, "true");
diff --git a/be/src/common/config.h b/be/src/common/config.h
index e7844e02395..25c95391968 100644
--- a/be/src/common/config.h
+++ b/be/src/common/config.h
@@ -1113,8 +1113,6 @@ DECLARE_Int32(segcompaction_task_max_rows);
// Max total file size allowed in a single segcompaction task.
DECLARE_Int64(segcompaction_task_max_bytes);
-DECLARE_Int32(segcompaction_wait_for_dbm_task_timeout_s);
-
// Global segcompaction thread pool size.
DECLARE_mInt32(segcompaction_num_threads);
diff --git a/be/src/olap/base_tablet.cpp b/be/src/olap/base_tablet.cpp
index 2c858e557bb..4ad411262ed 100644
--- a/be/src/olap/base_tablet.cpp
+++ b/be/src/olap/base_tablet.cpp
@@ -525,13 +525,12 @@ Status BaseTablet::lookup_row_key(const Slice&
encoded_key, TabletSchema* latest
// user can get all delete bitmaps from that token.
// if `token` is nullptr, the calculation will run in local, and user can get
the result
// delete bitmap from `delete_bitmap` directly.
-Status BaseTablet::calc_delete_bitmap(
- const BaseTabletSPtr& tablet, RowsetSharedPtr rowset,
- const std::vector<segment_v2::SegmentSharedPtr>& segments,
- const std::vector<RowsetSharedPtr>& specified_rowsets, DeleteBitmapPtr
delete_bitmap,
- int64_t end_version, CalcDeleteBitmapToken* token, RowsetWriter*
rowset_writer,
- DeleteBitmapPtr tablet_delete_bitmap,
- std::function<void(segment_v2::SegmentSharedPtr, Status)> callback) {
+Status BaseTablet::calc_delete_bitmap(const BaseTabletSPtr& tablet,
RowsetSharedPtr rowset,
+ const
std::vector<segment_v2::SegmentSharedPtr>& segments,
+ const std::vector<RowsetSharedPtr>&
specified_rowsets,
+ DeleteBitmapPtr delete_bitmap, int64_t
end_version,
+ CalcDeleteBitmapToken* token,
RowsetWriter* rowset_writer,
+ DeleteBitmapPtr tablet_delete_bitmap) {
if (specified_rowsets.empty() || segments.empty()) {
return Status::OK();
}
@@ -541,8 +540,7 @@ Status BaseTablet::calc_delete_bitmap(
const auto& seg = segment;
if (token != nullptr) {
RETURN_IF_ERROR(token->submit(tablet, rowset, seg,
specified_rowsets, end_version,
- delete_bitmap, rowset_writer,
tablet_delete_bitmap,
- callback));
+ delete_bitmap, rowset_writer,
tablet_delete_bitmap));
} else {
RETURN_IF_ERROR(tablet->calc_segment_delete_bitmap(
rowset, segment, specified_rowsets, delete_bitmap,
end_version, rowset_writer,
@@ -584,14 +582,6 @@ Status
BaseTablet::calc_segment_delete_bitmap(RowsetSharedPtr rowset,
}
}
- DBUG_EXECUTE_IF("BaseTablet::calc_segment_delete_bitmap.sleep", {
- auto target_tablet_id = dp->param<int64_t>("tablet_id", -1);
- auto sleep = dp->param<int64_t>("sleep", 10);
- if (target_tablet_id == tablet_id()) {
- std::this_thread::sleep_for(std::chrono::seconds(sleep));
- }
- });
-
if (rowset_schema->num_variant_columns() > 0) {
// During partial updates, the extracted columns of a variant should
not be included in the rowset schema.
// This is because the partial update for a variant needs to ignore
the extracted columns.
diff --git a/be/src/olap/base_tablet.h b/be/src/olap/base_tablet.h
index d2762a8a53e..acd31ec2ff7 100644
--- a/be/src/olap/base_tablet.h
+++ b/be/src/olap/base_tablet.h
@@ -176,14 +176,13 @@ public:
// for rowset 6-7. Also, if a compaction happens between commit_txn and
// publish_txn, we should remove compaction input rowsets' delete_bitmap
// and build newly generated rowset's delete_bitmap
- static Status calc_delete_bitmap(
- const BaseTabletSPtr& tablet, RowsetSharedPtr rowset,
- const std::vector<segment_v2::SegmentSharedPtr>& segments,
- const std::vector<RowsetSharedPtr>& specified_rowsets,
DeleteBitmapPtr delete_bitmap,
- int64_t version, CalcDeleteBitmapToken* token, RowsetWriter*
rowset_writer = nullptr,
- DeleteBitmapPtr tablet_delete_bitmap = nullptr,
- std::function<void(segment_v2::SegmentSharedPtr, Status)> callback
=
- [](segment_v2::SegmentSharedPtr, Status) {});
+ static Status calc_delete_bitmap(const BaseTabletSPtr& tablet,
RowsetSharedPtr rowset,
+ const
std::vector<segment_v2::SegmentSharedPtr>& segments,
+ const std::vector<RowsetSharedPtr>&
specified_rowsets,
+ DeleteBitmapPtr delete_bitmap, int64_t
version,
+ CalcDeleteBitmapToken* token,
+ RowsetWriter* rowset_writer = nullptr,
+ DeleteBitmapPtr tablet_delete_bitmap =
nullptr);
Status calc_segment_delete_bitmap(RowsetSharedPtr rowset,
const segment_v2::SegmentSharedPtr& seg,
diff --git a/be/src/olap/calc_delete_bitmap_executor.cpp
b/be/src/olap/calc_delete_bitmap_executor.cpp
index 28cb0038771..bd197ccb4ed 100644
--- a/be/src/olap/calc_delete_bitmap_executor.cpp
+++ b/be/src/olap/calc_delete_bitmap_executor.cpp
@@ -29,20 +29,19 @@
namespace doris {
using namespace ErrorCode;
-Status CalcDeleteBitmapToken::submit(
- BaseTabletSPtr tablet, RowsetSharedPtr cur_rowset,
- const segment_v2::SegmentSharedPtr& cur_segment,
- const std::vector<RowsetSharedPtr>& target_rowsets, int64_t
end_version,
- DeleteBitmapPtr delete_bitmap, RowsetWriter* rowset_writer,
- DeleteBitmapPtr tablet_delete_bitmap,
- std::function<void(segment_v2::SegmentSharedPtr, Status)> callback) {
+Status CalcDeleteBitmapToken::submit(BaseTabletSPtr tablet, RowsetSharedPtr
cur_rowset,
+ const segment_v2::SegmentSharedPtr&
cur_segment,
+ const std::vector<RowsetSharedPtr>&
target_rowsets,
+ int64_t end_version, DeleteBitmapPtr
delete_bitmap,
+ RowsetWriter* rowset_writer,
+ DeleteBitmapPtr tablet_delete_bitmap) {
{
std::shared_lock rlock(_lock);
RETURN_IF_ERROR(_status);
_resource_ctx = thread_context()->resource_ctx();
}
- return _thread_token->submit_func([=, this, callback =
std::move(callback)]() {
+ return _thread_token->submit_func([=, this]() {
SCOPED_ATTACH_TASK(_resource_ctx);
auto st = tablet->calc_segment_delete_bitmap(cur_rowset, cur_segment,
target_rowsets,
delete_bitmap,
end_version, rowset_writer,
@@ -57,7 +56,6 @@ Status CalcDeleteBitmapToken::submit(
_status = st;
}
}
- callback(cur_segment, st);
});
}
diff --git a/be/src/olap/calc_delete_bitmap_executor.h
b/be/src/olap/calc_delete_bitmap_executor.h
index 040fe1d40e5..a9faf019a97 100644
--- a/be/src/olap/calc_delete_bitmap_executor.h
+++ b/be/src/olap/calc_delete_bitmap_executor.h
@@ -54,8 +54,7 @@ public:
const segment_v2::SegmentSharedPtr& cur_segment,
const std::vector<RowsetSharedPtr>& target_rowsets, int64_t
end_version,
DeleteBitmapPtr delete_bitmap, RowsetWriter* rowset_writer,
- DeleteBitmapPtr tablet_delete_bitmap,
- std::function<void(segment_v2::SegmentSharedPtr, Status)>
callback);
+ DeleteBitmapPtr tablet_delete_bitmap);
// calculate delete bitmap between `segments`
Status submit(BaseTabletSPtr tablet, TabletSchemaSPtr schema, RowsetId
rowset_id,
diff --git a/be/src/olap/olap_common.h b/be/src/olap/olap_common.h
index d018a315ac3..2bcc6645c22 100644
--- a/be/src/olap/olap_common.h
+++ b/be/src/olap/olap_common.h
@@ -27,7 +27,6 @@
#include <list>
#include <map>
#include <memory>
-#include <mutex>
#include <ostream>
#include <sstream>
#include <string>
@@ -43,7 +42,6 @@
#include "olap/inverted_index_stats.h"
#include "olap/olap_define.h"
#include "olap/rowset/rowset_fwd.h"
-#include "util/countdown_latch.h"
#include "util/hash_util.hpp"
#include "util/time.h"
#include "util/uid_util.h"
@@ -566,30 +564,6 @@ inline RowsetId extract_rowset_id(std::string_view
filename) {
}
class DeleteBitmap;
-
-struct CalcDeleteBitmapTask {
- std::mutex m;
- Status status {Status::OK()};
- CountDownLatch latch {1};
-
- void set_status(Status st) {
- {
- std::unique_lock l(m);
- status = std::move(st);
- }
- latch.count_down(1);
- }
-
- Status get_status() {
- if (!latch.wait_for(
-
std::chrono::seconds(config::segcompaction_wait_for_dbm_task_timeout_s))) {
- return Status::InternalError<false>("wait for calc delete bitmap
task timeout");
- };
- std::unique_lock l(m);
- return status;
- }
-};
-
// merge on write context
struct MowContext {
MowContext(int64_t version, int64_t txnid,
std::shared_ptr<RowsetIdUnorderedSet> ids,
@@ -599,21 +573,11 @@ struct MowContext {
rowset_ids(std::move(ids)),
rowset_ptrs(std::move(rowset_ptrs)),
delete_bitmap(std::move(db)) {}
-
- CalcDeleteBitmapTask* get_calc_dbm_task(int32_t segment_id) {
- std::lock_guard l(m);
- return &calc_dbm_tasks[segment_id];
- }
-
int64_t max_version;
int64_t txn_id;
std::shared_ptr<RowsetIdUnorderedSet> rowset_ids;
std::vector<RowsetSharedPtr> rowset_ptrs;
std::shared_ptr<DeleteBitmap> delete_bitmap;
-
- std::mutex m;
- // status of calc delete bitmap task in flush phase
- std::unordered_map<int32_t /* origin seg id*/, CalcDeleteBitmapTask>
calc_dbm_tasks;
};
// used for controll compaction
diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp
b/be/src/olap/rowset/beta_rowset_writer.cpp
index 71760b343f7..05f14af1ddd 100644
--- a/be/src/olap/rowset/beta_rowset_writer.cpp
+++ b/be/src/olap/rowset/beta_rowset_writer.cpp
@@ -336,14 +336,10 @@ Status
BaseBetaRowsetWriter::_generate_delete_bitmap(int32_t segment_id) {
_context.tablet->get_rowset_by_ids(_context.mow_context->rowset_ids.get());
}
OlapStopWatch watch;
- auto finish_callback = [this](segment_v2::SegmentSharedPtr segment, Status
st) {
- auto* task = calc_delete_bitmap_task(segment->id());
- task->set_status(st);
- };
RETURN_IF_ERROR(BaseTablet::calc_delete_bitmap(
_context.tablet, rowset_ptr, segments, specified_rowsets,
_context.mow_context->delete_bitmap,
_context.mow_context->max_version,
- _calc_delete_bitmap_token.get(), nullptr, nullptr,
std::move(finish_callback)));
+ _calc_delete_bitmap_token.get()));
size_t total_rows = std::accumulate(
segments.begin(), segments.end(), 0,
[](size_t sum, const segment_v2::SegmentSharedPtr& s) { return sum
+= s->num_rows(); });
@@ -426,8 +422,8 @@ Status
BetaRowsetWriter::_find_longest_consecutive_small_segment(
auto dst_seg_id = _num_segcompacted.load();
RETURN_IF_ERROR(_rename_compacted_segment_plain(_segcompacted_point++));
if (_segcompaction_worker->need_convert_delete_bitmap()) {
-
RETURN_IF_ERROR(_segcompaction_worker->convert_segment_delete_bitmap(
- segment, _context.mow_context->delete_bitmap,
segid, dst_seg_id));
+ _segcompaction_worker->convert_segment_delete_bitmap(
+ _context.mow_context->delete_bitmap, segid,
dst_seg_id);
}
continue;
} else {
@@ -455,12 +451,10 @@ Status
BetaRowsetWriter::_find_longest_consecutive_small_segment(
VLOG_DEBUG << "only one candidate segment";
auto src_seg_id = _segcompacted_point.load();
auto dst_seg_id = _num_segcompacted.load();
- segment_v2::SegmentSharedPtr segment;
- RETURN_IF_ERROR(_load_noncompacted_segment(segment, src_seg_id));
RETURN_IF_ERROR(_rename_compacted_segment_plain(_segcompacted_point++));
if (_segcompaction_worker->need_convert_delete_bitmap()) {
-
RETURN_IF_ERROR(_segcompaction_worker->convert_segment_delete_bitmap(
- segment, _context.mow_context->delete_bitmap, src_seg_id,
dst_seg_id));
+ _segcompaction_worker->convert_segment_delete_bitmap(
+ _context.mow_context->delete_bitmap, src_seg_id,
dst_seg_id);
}
segments->clear();
return Status::OK();
@@ -659,12 +653,10 @@ Status
BetaRowsetWriter::_segcompaction_rename_last_segments() {
VLOG_DEBUG << "segcompaction last few segments";
for (int32_t segid = _segcompacted_point; segid < _num_segment; segid++) {
auto dst_segid = _num_segcompacted.load();
- segment_v2::SegmentSharedPtr segment;
- RETURN_IF_ERROR(_load_noncompacted_segment(segment, segid));
RETURN_IF_ERROR(_rename_compacted_segment_plain(_segcompacted_point++));
if (_segcompaction_worker->need_convert_delete_bitmap()) {
-
RETURN_IF_ERROR(_segcompaction_worker->convert_segment_delete_bitmap(
- segment, _context.mow_context->delete_bitmap, segid,
dst_segid));
+ _segcompaction_worker->convert_segment_delete_bitmap(
+ _context.mow_context->delete_bitmap, segid, dst_segid);
}
}
return Status::OK();
diff --git a/be/src/olap/rowset/beta_rowset_writer.h
b/be/src/olap/rowset/beta_rowset_writer.h
index e21bdf4009d..1c62853c8b0 100644
--- a/be/src/olap/rowset/beta_rowset_writer.h
+++ b/be/src/olap/rowset/beta_rowset_writer.h
@@ -193,13 +193,6 @@ public:
return this->_idx_files.get_file_writers();
}
- CalcDeleteBitmapToken* calc_delete_bitmap_token() { return
_calc_delete_bitmap_token.get(); }
-
- CalcDeleteBitmapTask* calc_delete_bitmap_task(int32_t segment_id) {
- DCHECK(_context.mow_context != nullptr);
- return _context.mow_context->get_calc_dbm_task(segment_id);
- }
-
private:
// build a tmp rowset for load segment to calc delete_bitmap
// for this segment
@@ -259,6 +252,7 @@ protected:
fmt::memory_buffer vlog_buffer;
+ std::shared_ptr<MowContext> _mow_context;
std::unique_ptr<CalcDeleteBitmapToken> _calc_delete_bitmap_token;
int64_t _delete_bitmap_ns = 0;
diff --git a/be/src/olap/rowset/segcompaction.cpp
b/be/src/olap/rowset/segcompaction.cpp
index 456d64d82b5..c5478499bc0 100644
--- a/be/src/olap/rowset/segcompaction.cpp
+++ b/be/src/olap/rowset/segcompaction.cpp
@@ -340,8 +340,8 @@ Status
SegcompactionWorker::_do_compact_segments(SegCompactionCandidatesSharedPt
RETURN_IF_ERROR(_delete_original_segments(begin, end));
if (_rowid_conversion != nullptr) {
- RETURN_IF_ERROR(convert_segment_delete_bitmap(segments,
ctx.mow_context->delete_bitmap,
- begin, end,
_writer->_num_segcompacted));
+ convert_segment_delete_bitmap(ctx.mow_context->delete_bitmap, begin,
end,
+ _writer->_num_segcompacted);
}
RETURN_IF_ERROR(_writer->_rename_compacted_segments(begin, end));
if (_index_file_writer != nullptr) {
@@ -370,21 +370,6 @@ Status
SegcompactionWorker::_do_compact_segments(SegCompactionCandidatesSharedPt
return Status::OK();
}
-Status SegcompactionWorker::_wait_calc_delete_bitmap(const
SegCompactionCandidates& segments) {
- for (const auto& segment : segments) {
- auto* calc_task = _writer->calc_delete_bitmap_task(segment->id());
- if (auto st = calc_task->get_status() /* blocking */; !st.ok()) {
- LOG_WARNING("failed to wait for segment calc dbm task")
- .tag("tablet_id", _writer->context().tablet_id)
- .tag("rowset_id", segment->rowset_id().to_string())
- .tag("segment_id", segment->id())
- .tag("error", st.to_string());
- return st;
- }
- }
- return Status::OK();
-}
-
void SegcompactionWorker::compact_segments(SegCompactionCandidatesSharedPtr
segments) {
Status status = Status::OK();
if (_is_compacting_state_mutable.exchange(false)) {
@@ -430,12 +415,8 @@ bool SegcompactionWorker::need_convert_delete_bitmap() {
tablet->tablet_schema()->has_sequence_col();
}
-Status
SegcompactionWorker::convert_segment_delete_bitmap(segment_v2::SegmentSharedPtr
segment,
- DeleteBitmapPtr
src_delete_bitmap,
- uint32_t src_seg_id,
- uint32_t
dest_seg_id) {
- // should wait until delete bitmaps on input segments are generated before
converting them
- RETURN_IF_ERROR(_wait_calc_delete_bitmap({segment}));
+void SegcompactionWorker::convert_segment_delete_bitmap(DeleteBitmapPtr
src_delete_bitmap,
+ uint32_t src_seg_id,
uint32_t dest_seg_id) {
// lazy init
if (nullptr == _converted_delete_bitmap) {
_converted_delete_bitmap =
std::make_shared<DeleteBitmap>(_writer->context().tablet_id);
@@ -447,16 +428,11 @@ Status
SegcompactionWorker::convert_segment_delete_bitmap(segment_v2::SegmentSha
_converted_delete_bitmap->set({rowset_id, dest_seg_id,
DeleteBitmap::TEMP_VERSION_COMMON},
*seg_map);
}
-
DBUG_EXECUTE_IF("SegcompactionWorker::convert_segment_delete_bitmap.after",
DBUG_BLOCK);
- return Status::OK();
}
-Status
SegcompactionWorker::convert_segment_delete_bitmap(SegCompactionCandidatesSharedPtr
segments,
- DeleteBitmapPtr
src_delete_bitmap,
- uint32_t src_begin,
uint32_t src_end,
- uint32_t dst_seg_id)
{
- // should wait until delete bitmaps on input segments are generated before
converting them
- RETURN_IF_ERROR(_wait_calc_delete_bitmap(*segments));
+void SegcompactionWorker::convert_segment_delete_bitmap(DeleteBitmapPtr
src_delete_bitmap,
+ uint32_t src_begin,
uint32_t src_end,
+ uint32_t dst_seg_id) {
// lazy init
if (nullptr == _converted_delete_bitmap) {
_converted_delete_bitmap =
std::make_shared<DeleteBitmap>(_writer->context().tablet_id);
@@ -480,8 +456,6 @@ Status
SegcompactionWorker::convert_segment_delete_bitmap(SegCompactionCandidate
{rowset_id, dst_seg_id,
DeleteBitmap::TEMP_VERSION_COMMON}, dst_row_id);
}
}
-
DBUG_EXECUTE_IF("SegcompactionWorker::convert_segment_delete_bitmap.after",
DBUG_BLOCK);
- return Status::OK();
}
bool SegcompactionWorker::cancel() {
diff --git a/be/src/olap/rowset/segcompaction.h
b/be/src/olap/rowset/segcompaction.h
index bcd800f78ac..121fec8d100 100644
--- a/be/src/olap/rowset/segcompaction.h
+++ b/be/src/olap/rowset/segcompaction.h
@@ -63,12 +63,10 @@ public:
bool need_convert_delete_bitmap();
- Status convert_segment_delete_bitmap(segment_v2::SegmentSharedPtr segment,
- DeleteBitmapPtr src_delete_bitmap,
uint32_t src_seg_id,
- uint32_t dest_seg_id);
- Status convert_segment_delete_bitmap(SegCompactionCandidatesSharedPtr
segments,
- DeleteBitmapPtr src_delete_bitmap,
uint32_t src_begin,
- uint32_t src_end, uint32_t
dest_seg_id);
+ void convert_segment_delete_bitmap(DeleteBitmapPtr src_delete_bitmap,
uint32_t src_seg_id,
+ uint32_t dest_seg_id);
+ void convert_segment_delete_bitmap(DeleteBitmapPtr src_delete_bitmap,
uint32_t src_begin,
+ uint32_t src_end, uint32_t dest_seg_id);
DeleteBitmapPtr get_converted_delete_bitmap() { return
_converted_delete_bitmap; }
io::FileWriterPtr& get_file_writer() { return _file_writer; }
@@ -95,7 +93,6 @@ private:
Status _check_correctness(OlapReaderStatistics& reader_stat,
Merger::Statistics& merger_stat,
uint32_t begin, uint32_t end, bool
is_mow_with_cluster_keys);
Status _do_compact_segments(SegCompactionCandidatesSharedPtr segments);
- Status _wait_calc_delete_bitmap(const SegCompactionCandidates& segments);
private:
//TODO(zhengyu): current impl depends heavily on the access to feilds of
BetaRowsetWriter
diff --git a/be/test/olap/segcompaction_mow_test.cpp
b/be/test/olap/segcompaction_mow_test.cpp
index d8bee2b9ce5..d1e2b44ce4d 100644
--- a/be/test/olap/segcompaction_mow_test.cpp
+++ b/be/test/olap/segcompaction_mow_test.cpp
@@ -359,7 +359,6 @@ TEST_P(SegCompactionMoWTest, SegCompactionThenRead) {
}
}
}
-
writer_context.mow_context->get_calc_dbm_task(i)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -420,8 +419,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
DeleteBitmapPtr delete_bitmap = std::make_shared<DeleteBitmap>(TABLET_ID);
uint32_t rows_mark_deleted = 0;
uint32_t total_written_rows = 0;
-
- uint32_t cur_seg_id = 0;
{ // write `num_segments * rows_per_segment` rows to rowset
RowsetWriterContext writer_context;
create_rowset_writer_context(20048, tablet_schema, &writer_context);
@@ -462,7 +459,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -470,7 +466,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
segid++;
total_written_rows += rows_per_segment;
}
-
num_segments = 2;
rows_per_segment = 6400;
for (int i = 0; i < num_segments; ++i) {
@@ -492,7 +487,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -500,7 +494,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
segid++;
total_written_rows += rows_per_segment;
}
-
num_segments = 1;
rows_per_segment = 4096;
for (int i = 0; i < num_segments; ++i) {
@@ -522,7 +515,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -530,7 +522,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
segid++;
total_written_rows += rows_per_segment;
}
-
num_segments = 1;
rows_per_segment = 6400;
for (int i = 0; i < num_segments; ++i) {
@@ -552,7 +543,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -560,7 +550,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
segid++;
total_written_rows += rows_per_segment;
}
-
num_segments = 8;
rows_per_segment = 4096;
std::map<uint32_t, uint32_t> unique_keys;
@@ -585,7 +574,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
}
unique_keys.emplace(k1, rid);
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -623,7 +611,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_ooooOOoOooooooooO) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -662,7 +649,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_OoOoO) {
DeleteBitmapPtr delete_bitmap = std::make_shared<DeleteBitmap>(TABLET_ID);
uint32_t rows_mark_deleted = 0;
uint32_t total_written_rows = 0;
- uint32_t cur_seg_id = 0;
{ // write `num_segments * rows_per_segment` rows to rowset
RowsetWriterContext writer_context;
create_rowset_writer_context(20049, tablet_schema, &writer_context);
@@ -703,7 +689,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_OoOoO) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -732,7 +717,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_OoOoO) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -761,7 +745,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_OoOoO) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -790,7 +773,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_OoOoO) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -819,7 +801,6 @@ TEST_F(SegCompactionMoWTest,
SegCompactionInterleaveWithBig_OoOoO) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(cur_seg_id++)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
@@ -893,7 +874,6 @@ TEST_F(SegCompactionMoWTest, SegCompactionNotTrigger) {
rows_mark_deleted++;
}
}
-
writer_context.mow_context->get_calc_dbm_task(i)->set_status(Status::OK());
s = rowset_writer->add_block(&block);
EXPECT_TRUE(s.ok());
s = rowset_writer->flush();
diff --git
a/regression-test/data/fault_injection_p0/test_mow_seq_seg_compaction.out
b/regression-test/data/fault_injection_p0/test_mow_seq_seg_compaction.out
deleted file mode 100644
index ad5c6fa5903..00000000000
--- a/regression-test/data/fault_injection_p0/test_mow_seq_seg_compaction.out
+++ /dev/null
@@ -1,23 +0,0 @@
--- This file is automatically generated. You should know what you did if you
want to edit this
--- !sql --
-4065
-
--- !sql --
-8130
-
--- !sql --
-0 0 99999 2 0 99999
-1 1 99999 2 0 99999
-2 2 99999 2 0 99999
-3 3 99999 2 0 99999
-4 4 99999 2 0 99999
-5 5 99999 2 0 99999
-6 6 99999 2 0 99999
-7 7 99999 2 0 99999
-8 8 99999 2 0 99999
-9 9 99999 2 0 99999
-10 10 99999 2 0 99999
-
--- !dup_key_count --
-0
-
diff --git
a/regression-test/suites/fault_injection_p0/test_mow_seq_seg_compaction.groovy
b/regression-test/suites/fault_injection_p0/test_mow_seq_seg_compaction.groovy
deleted file mode 100644
index 375e3627db9..00000000000
---
a/regression-test/suites/fault_injection_p0/test_mow_seq_seg_compaction.groovy
+++ /dev/null
@@ -1,103 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-suite("test_mow_seq_seg_compaction", "nonConcurrent") {
- def table1 = "test_mow_seq_seg_compaction"
- sql "DROP TABLE IF EXISTS ${table1} FORCE;"
- sql """ CREATE TABLE IF NOT EXISTS ${table1} (
- `k1` int NOT NULL,
- `c1` int,
- `c2` int
- )UNIQUE KEY(k1)
- DISTRIBUTED BY HASH(k1) BUCKETS 1
- PROPERTIES (
- "enable_unique_key_merge_on_write" = "true",
- "disable_auto_compaction" = "true",
- "function_column.sequence_col" = "c2",
- "replication_num" = "1"); """
-
- sql """insert into ${table1} select number,number,99999 from
numbers("number"="4065");"""
- sql "sync;"
- qt_sql "select count() from ${table1};"
-
- def tabletStats = sql_return_maparray """ show tablets from ${table1}; """
- assert tabletStats.size() == 1
- def tabletId = tabletStats[0].TabletId
-
- // to cause multi segments and segment compaction
- def customBeConfig = [
- doris_scanner_row_bytes : 1,
- segcompaction_batch_size: 2
- ]
-
- setBeConfigTemporary(customBeConfig) {
- try {
- GetDebugPoint().clearDebugPointsForAllBEs()
- GetDebugPoint().clearDebugPointsForAllFEs()
- // batch_size is 4164 in csv_reader.cpp
- // _batch_size is 8192 in vtablet_writer.cpp
- // to cause multi segments
- GetDebugPoint().enableDebugPointForAllBEs("MemTable.need_flush")
-
-
GetDebugPoint().enableDebugPointForAllBEs("BaseTablet::calc_segment_delete_bitmap.sleep",
[tablet_id: "${tabletId}"])
- //
GetDebugPoint().enableDebugPointForAllBEs("SegcompactionWorker::convert_segment_delete_bitmap.after")
- Thread.sleep(1000)
-
- int rows = 4064
- // load data that will have multi segments and there are duplicate
keys between segments
- String content = ""
- (1..rows).each {
- int x = 100000 + it
- content += "${x},${x},${x}\n"
- }
- (1..rows).each {
- int x = it
- content += "${x},${x},${1}\n"
- }
- content += "200000,200000,200000"
- def t1 = Thread.start {
- streamLoad {
- table "${table1}"
- set 'column_separator', ','
- inputStream new ByteArrayInputStream(content.getBytes())
- set 'memtable_on_sink_node', 'false'
- time 30000
-
- check { result, exception, startTime, endTime ->
- if (exception != null) {
- throw exception
- }
- def json = parseJson(result)
- assert "success" == json.Status.toLowerCase()
- }
- }
- }
- // Thread.sleep(2000)
- //
GetDebugPoint().disableDebugPointForAllBEs("SegcompactionWorker::convert_segment_delete_bitmap.after")
- t1.join()
- qt_sql "select count() from ${table1};"
- qt_sql "select *,__DORIS_VERSION_COL__ as ver,
__DORIS_DELETE_SIGN__ as del,__DORIS_SEQUENCE_COL__ as seq from ${table1} where
k1<=10 order by k1,__DORIS_VERSION_COL__;"
- qt_dup_key_count "select count() from (select k1,count() as cnt
from ${table1} group by k1 having cnt > 1) A;"
- } catch(Exception e) {
- logger.info(e.getMessage())
- throw e
- } finally {
- GetDebugPoint().clearDebugPointsForAllBEs()
- GetDebugPoint().clearDebugPointsForAllFEs()
- }
- }
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]