From e1da7bcc48ee9a9887ebbdc9b9ac2e352fc78745 Mon Sep 17 00:00:00 2001 From: bowenliu Date: Tue, 13 Dec 2022 23:00:49 +0800 Subject: [PATCH] fix switchover hang during getting CSN --- .../ddes/adapter/ss_transaction.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_transaction.cpp b/src/gausskernel/ddes/adapter/ss_transaction.cpp index e338f477f..153d2fa4c 100644 --- a/src/gausskernel/ddes/adapter/ss_transaction.cpp +++ b/src/gausskernel/ddes/adapter/ss_transaction.cpp @@ -117,6 +117,10 @@ CommitSeqNo SSTransactionIdGetCommitSeqNo(TransactionId transactionId, bool isCo dms_txn_info.snapshotxmin = InvalidTransactionId; } + if (SS_IN_REFORM && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER)) { + ereport(FATAL, (errmsg("SSTransactionIdGetCommitSeqNo failed during reform, xid=%lu.", transactionId))); + } + do { if (SSTransactionIdGetCSN(&dms_txn_info, &xid_csn_result) == DMS_SUCCESS) { csn = xid_csn_result.csn; @@ -132,9 +136,10 @@ CommitSeqNo SSTransactionIdGetCommitSeqNo(TransactionId transactionId, bool isCo } else { ereport(DEBUG1, (errmsg("SS get txn info success, snapshot is NULL"))); } + break; } else { - if (SS_IN_FAILOVER && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER)) { - ereport(FATAL, (errmsg("SS get CSN by TransactionId failed during failover, xid=%lu", transactionId))); + if (SS_IN_REFORM && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER)) { + ereport(FATAL, (errmsg("SSTransactionIdGetCommitSeqNo failed during reform, xid=%lu.", transactionId))); } pg_usleep(USECS_PER_SEC); continue; @@ -196,6 +201,9 @@ bool SSTransactionIdDidCommit(TransactionId transactionId) transactionId, did_commit))); break; } else { + if (SS_IN_REFORM && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER)) { + ereport(FATAL, (errmsg("SSTransactionIdDidCommit failed during reform, xid=%lu.", transactionId))); + } pg_usleep(USECS_PER_SEC); continue; } @@ -229,6 +237,9 @@ bool SSTransactionIdIsInProgress(TransactionId transactionId) transactionId, in_progress))); break; } else { + if (SS_IN_REFORM && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER)) { + ereport(FATAL, (errmsg("SSTransactionIdIsInProgress failed during reform, xid=%lu.", transactionId))); + } pg_usleep(USECS_PER_SEC); continue; } @@ -251,6 +262,9 @@ TransactionId SSMultiXactIdGetUpdateXid(TransactionId xmax, uint16 t_infomask, u ereport(DEBUG1, (errmsg("SS get update xid success, multixact xid=%lu, uxid=%lu.", xmax, update_xid))); break; } else { + if (SS_IN_REFORM && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER)) { + ereport(FATAL, (errmsg("SSMultiXactIdGetUpdateXid failed during reform, xid=%lu.", xmax))); + } pg_usleep(USECS_PER_SEC); continue; }