From 01db76bf64de8aa5082ec9e5710b079b0603412f Mon Sep 17 00:00:00 2001 From: "arcoalien@qq.com" Date: Mon, 27 Nov 2023 12:10:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=80=E5=90=AF=E5=A4=87?= =?UTF-8?q?=E6=9C=BA=E5=86=99=E8=BD=AC=E5=8F=91=E5=90=8E=EF=BC=8C=E5=8F=91?= =?UTF-8?q?=E7=94=9F=E4=BA=86reform=EF=BC=8Cdebug=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=A4=87=E6=9C=BAcoredump=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/ddes/adapter/ss_transaction.cpp | 10 +++++----- src/gausskernel/optimizer/plan/pgxcplan_single.cpp | 6 ++++++ src/gausskernel/storage/access/transam/xact.cpp | 2 +- src/gausskernel/storage/ipc/procarray.cpp | 3 +++ src/gausskernel/storage/replication/libpqsw.cpp | 1 + 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_transaction.cpp b/src/gausskernel/ddes/adapter/ss_transaction.cpp index 247cfee09..aac8aef5c 100644 --- a/src/gausskernel/ddes/adapter/ss_transaction.cpp +++ b/src/gausskernel/ddes/adapter/ss_transaction.cpp @@ -289,7 +289,7 @@ CommitSeqNo SSTransactionIdGetCommitSeqNo(TransactionId transactionId, bool isCo } if (SS_IN_REFORM && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER || t_thrd.role == STREAM_WORKER)) { - ereport(FATAL, (errmsg("SSTransactionIdGetCommitSeqNo failed during reform, xid=%lu.", transactionId))); + ereport(ERROR, (errmsg("SSTransactionIdGetCommitSeqNo failed during reform, xid=%lu.", transactionId))); } do { @@ -311,7 +311,7 @@ CommitSeqNo SSTransactionIdGetCommitSeqNo(TransactionId transactionId, bool isCo } else { if (SS_IN_REFORM && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER || t_thrd.role == STREAM_WORKER)) { - ereport(FATAL, (errmsg("SSTransactionIdGetCommitSeqNo failed during reform, xid=%lu.", transactionId))); + ereport(ERROR, (errmsg("SSTransactionIdGetCommitSeqNo failed during reform, xid=%lu.", transactionId))); } pg_usleep(USECS_PER_SEC); continue; @@ -396,7 +396,7 @@ void SSTransactionIdDidCommit(TransactionId transactionId, bool* ret_did_commit) } else { if (SS_IN_REFORM && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER || t_thrd.role == STREAM_WORKER)) { - ereport(FATAL, (errmsg("SSTransactionIdDidCommit failed during reform, xid=%lu.", transactionId))); + ereport(ERROR, (errmsg("SSTransactionIdDidCommit failed during reform, xid=%lu.", transactionId))); } pg_usleep(USECS_PER_SEC); continue; @@ -430,7 +430,7 @@ void SSTransactionIdIsInProgress(TransactionId transactionId, bool *in_progress) } else { if (SS_IN_REFORM && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER || t_thrd.role == STREAM_WORKER)) { - ereport(FATAL, (errmsg("SSTransactionIdIsInProgress failed during reform, xid=%lu.", transactionId))); + ereport(ERROR, (errmsg("SSTransactionIdIsInProgress failed during reform, xid=%lu.", transactionId))); } pg_usleep(USECS_PER_SEC); continue; @@ -455,7 +455,7 @@ TransactionId SSMultiXactIdGetUpdateXid(TransactionId xmax, uint16 t_infomask, u } else { if (SS_IN_REFORM && (t_thrd.role == WORKER || t_thrd.role == THREADPOOL_WORKER || t_thrd.role == STREAM_WORKER)) { - ereport(FATAL, (errmsg("SSMultiXactIdGetUpdateXid failed during reform, xid=%lu.", xmax))); + ereport(ERROR, (errmsg("SSMultiXactIdGetUpdateXid failed during reform, xid=%lu.", xmax))); } pg_usleep(USECS_PER_SEC); continue; diff --git a/src/gausskernel/optimizer/plan/pgxcplan_single.cpp b/src/gausskernel/optimizer/plan/pgxcplan_single.cpp index 1347d6c50..87c7d85db 100755 --- a/src/gausskernel/optimizer/plan/pgxcplan_single.cpp +++ b/src/gausskernel/optimizer/plan/pgxcplan_single.cpp @@ -221,6 +221,12 @@ PlannedStmt* pgxc_planner(Query* query, int cursorOptions, ParamListInfo boundPa ecxt = MemoryContextSwitchTo(current_context); edata = CopyErrorData(); + if (SS_STANDBY_MODE_WITH_REMOTE_EXECUTE) { + LWLockReleaseAll(); + AbortBufferIO(); + UnlockBuffers(); + } + /* * refuse to recreate plan if * 1. no query copy: query have been polluted by rewrite diff --git a/src/gausskernel/storage/access/transam/xact.cpp b/src/gausskernel/storage/access/transam/xact.cpp index 3e21f1bd2..f3b5e41e0 100755 --- a/src/gausskernel/storage/access/transam/xact.cpp +++ b/src/gausskernel/storage/access/transam/xact.cpp @@ -2032,7 +2032,7 @@ static TransactionId RecordTransactionAbort(bool isSubXact) * rels to delete (note that this routine is not responsible for actually * deleting 'em). We cannot have any child XIDs, either. */ - if (!TransactionIdIsValid(xid)) { + if (!TransactionIdIsValid(xid) || SS_STANDBY_MODE_WITH_REMOTE_EXECUTE) { /* Reset XactLastRecEnd until the next transaction writes something */ if (!isSubXact) t_thrd.xlog_cxt.XactLastRecEnd = 0; diff --git a/src/gausskernel/storage/ipc/procarray.cpp b/src/gausskernel/storage/ipc/procarray.cpp index 5095d235f..581f9d0aa 100755 --- a/src/gausskernel/storage/ipc/procarray.cpp +++ b/src/gausskernel/storage/ipc/procarray.cpp @@ -2072,6 +2072,9 @@ RETRY: snapshot->snapshotcsn = pg_atomic_read_u64(&t_thrd.xact_cxt.ShmemVariableCache->nextCommitSeqNo); } else { result = SSGetSnapshotData(snapshot); + if (result == NULL) { + ereport(ERROR, (errmsg("failed to request snapshot as current node is in reform!"))); + } } } else { result = GetLocalSnapshotData(snapshot); diff --git a/src/gausskernel/storage/replication/libpqsw.cpp b/src/gausskernel/storage/replication/libpqsw.cpp index e03246af2..57f30fcd6 100644 --- a/src/gausskernel/storage/replication/libpqsw.cpp +++ b/src/gausskernel/storage/replication/libpqsw.cpp @@ -1214,6 +1214,7 @@ bool libpqsw_connect(char* conninfo, const char *dbName, const char* userName) get_sw_cxt()->streamConn = PQconnectdb(conninfoRepl); if (PQstatus(get_sw_cxt()->streamConn) != CONNECTION_OK) { libpqsw_info("Connecting to remote server :%s ...failed!", conninfoRepl); + libpqsw_disconnect(true); ereport(ERROR, (errcode(ERRCODE_CONNECTION_TIMED_OUT), errmsg("standbywrite could not connect to the remote server,the connection info :%s : %s",