[BugFix] fix skip write txnlog when compaction fail (#59508)
Signed-off-by: luohaha <18810541851@163.com>
This commit is contained in:
parent
427a73f1a3
commit
d9a3c105f9
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue