diff --git a/src/storage/memtable/mvcc/ob_mvcc_trans_ctx.cpp b/src/storage/memtable/mvcc/ob_mvcc_trans_ctx.cpp index 4a6affb031613c23464374054163d821c90b4e74..39fd6ae26f69fafa9b0d271011e93a151430d956 100644 --- a/src/storage/memtable/mvcc/ob_mvcc_trans_ctx.cpp +++ b/src/storage/memtable/mvcc/ob_mvcc_trans_ctx.cpp @@ -1462,7 +1462,8 @@ int ObMvccRowCallback::clean_dirty_cb() { int ret = OB_SUCCESS; - if (marked_for_logging_) { + if (marked_for_logging_ || need_fill_redo_) { + // dirty callbacks unlink_trans_node(); dec_pending_cb_count(); marked_for_logging_ = false; diff --git a/src/storage/transaction/ob_trans_part_ctx.cpp b/src/storage/transaction/ob_trans_part_ctx.cpp index 72ff77c850dad2e25bff8002408c02fac4923e44..905458eeb2af031a32e0096610976209204ca805 100644 --- a/src/storage/transaction/ob_trans_part_ctx.cpp +++ b/src/storage/transaction/ob_trans_part_ctx.cpp @@ -7397,7 +7397,8 @@ int ObPartTransCtx::handle_2pc_prepare_request_raw_(int status) // The coordinator will retry on failure ret = OB_SUCCESS; } else if (OB_SUCCESS != get_status_() || OB_SUCCESS != status) { - if (OB_FAIL(alloc_local_trans_version_(OB_LOG_TRANS_REDO_WITH_PREPARE))) { + TRANS_LOG(WARN, "2pc prepare status not ok, write prepare-no", K(status), K(status_), K(*this)); + if (OB_FAIL(alloc_local_trans_version_(OB_LOG_TRANS_PREPARE))) { if (OB_EAGAIN != ret) { TRANS_LOG(WARN, "alloc log id and timestamp error", KR(ret), "context", *this); } else {