[BugFix] fix skip write txnlog when compaction fail (#59508)

Signed-off-by: luohaha <18810541851@163.com>
This commit is contained in:
Yixin Luo 2025-05-30 18:58:52 +08:00 committed by GitHub
parent 427a73f1a3
commit d9a3c105f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 28 additions and 1 deletions

View File

@ -28,6 +28,7 @@ Status CloudNativeIndexCompactionTask::execute(CancelFunc cancel_func, ThreadPoo
RETURN_IF_ERROR(cancel_func());
RETURN_IF_ERROR(execute_index_major_compaction(txn_log.get()));
_context->progress.update(100);
TEST_ERROR_POINT("CloudNativeIndexCompactionTask::execute::1");
if (_context->skip_write_txnlog) {
// return txn_log to caller later
_context->txn_log = txn_log;

View File

@ -126,7 +126,8 @@ void CompactionTaskCallback::finish_task(std::unique_ptr<CompactionTaskContext>&
compact_stat->set_in_queue_time_sec(context->stats->in_queue_time_sec);
compact_stat->set_sub_task_count(_request->tablet_ids_size());
compact_stat->set_total_compact_input_file_size(context->stats->input_file_size);
if (context->skip_write_txnlog) {
if (context->skip_write_txnlog && context->txn_log != nullptr) {
// context->txn_log could be nullptr if the task is failed before writing txn log.
_response->add_txn_logs()->CopyFrom(*context->txn_log);
}
DCHECK(_request != nullptr);

View File

@ -121,6 +121,7 @@ Status HorizontalCompactionTask::execute(CancelFunc cancel_func, ThreadPool* flu
RETURN_IF_ERROR(fill_compaction_segment_info(op_compaction, writer.get()));
op_compaction->set_compact_version(_tablet.metadata()->version());
RETURN_IF_ERROR(execute_index_major_compaction(txn_log.get()));
TEST_ERROR_POINT("HorizontalCompactionTask::execute::1");
if (_context->skip_write_txnlog) {
// return txn_log to caller later
_context->txn_log = txn_log;

View File

@ -92,6 +92,7 @@ Status VerticalCompactionTask::execute(CancelFunc cancel_func, ThreadPool* flush
RETURN_IF_ERROR(fill_compaction_segment_info(op_compaction, writer.get()));
op_compaction->set_compact_version(_tablet.metadata()->version());
RETURN_IF_ERROR(execute_index_major_compaction(txn_log.get()));
TEST_ERROR_POINT("VerticalCompactionTask::execute::1");
if (_context->skip_write_txnlog) {
// return txn_log to caller later
_context->txn_log = txn_log;

View File

@ -275,4 +275,27 @@ TEST_F(LakeCompactionSchedulerTest, test_issue44136) {
latch->wait();
}
TEST_F(LakeCompactionSchedulerTest, test_abort_with_not_write_txnlog) {
auto txn_id = next_id();
auto latch = std::make_shared<CountDownLatch>(1);
auto request = CompactRequest{};
auto response = CompactResponse{};
request.add_tablet_ids(_tablet_metadata->id());
request.set_timeout_ms(/*1 minute=*/60 * 1000);
request.set_txn_id(txn_id);
request.set_version(1);
request.set_skip_write_txnlog(true);
auto cb = ::google::protobuf::NewCallback(notify, latch);
TEST_ENABLE_ERROR_POINT("VerticalCompactionTask::execute::1", Status::IOError("injected error"));
TEST_ENABLE_ERROR_POINT("HorizontalCompactionTask::execute::1", Status::IOError("injected error"));
TEST_ENABLE_ERROR_POINT("CloudNativeIndexCompactionTask::execute::1", Status::IOError("injected error"));
SyncPoint::GetInstance()->EnableProcessing();
_compaction_scheduler.compact(nullptr, &request, &response, cb);
latch->wait();
TEST_DISABLE_ERROR_POINT("VerticalCompactionTask::execute::1");
TEST_DISABLE_ERROR_POINT("HorizontalCompactionTask::execute::1");
TEST_DISABLE_ERROR_POINT("CloudNativeIndexCompactionTask::execute::1");
SyncPoint::GetInstance()->DisableProcessing();
}
} // namespace starrocks::lake