From 74059eaf888b4171667387923bc4e8aeb08c1c2b Mon Sep 17 00:00:00 2001 From: jiangyan <18091841830@163.com> Date: Wed, 24 Jul 2024 10:43:50 +0800 Subject: [PATCH] =?UTF-8?q?lock1=E6=81=A2=E5=A4=8D=E8=A6=81=E6=B1=82?= =?UTF-8?q?=E5=9B=9E=E6=94=BE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../process/postmaster/postmaster.cpp | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/gausskernel/process/postmaster/postmaster.cpp b/src/gausskernel/process/postmaster/postmaster.cpp index 45d0ca2a7..f1c747e47 100644 --- a/src/gausskernel/process/postmaster/postmaster.cpp +++ b/src/gausskernel/process/postmaster/postmaster.cpp @@ -15047,7 +15047,32 @@ Datum disable_conn(PG_FUNCTION_ARGS) uint32 conn_mode = pg_atomic_read_u32(&g_instance.comm_cxt.localinfo_cxt.need_disable_connection_node); if (!WalRcvInProgress() && g_instance.pid_cxt.BarrierPreParsePID == 0) { g_instance.csn_barrier_cxt.startBarrierPreParse = true; - } + while (checkTimes--) { + if (knl_g_get_redo_finish_status()) { + redoDone = true; + break; + } + ereport(LOG, (errmsg("%d redo_done", redoDone))); + sleep(0.01); + } + ereport(LOG, (errmsg("%d redo_done", redoDone))); + if (!redoDone) { + if (!conn_mode) { + pg_atomic_write_u32(&g_instance.comm_cxt.localinfo_cxt.need_disable_connection_node, true); + // clean redo done + pg_atomic_write_u32(&t_thrd.walreceiverfuncs_cxt.WalRcv->rcvDoneFromShareStorage, false); + } + ereport(ERROR, (errcode_for_file_access(), + errmsg("could not add lock when DN is not redo all xlog, redo done flag is false"))); + } + + XLogRecPtr replay1 = GetXLogReplayRecPtrInPending(); + sleep(0.5); + XLogRecPtr replay2 = GetXLogReplayRecPtrInPending(); + if (replay1 != replay2) { + ereport(ERROR, (errcode_for_file_access(), errmsg("could not add lock when DN is not redo all xlog."))); + } + } } else { pg_atomic_write_u32(&g_instance.comm_cxt.localinfo_cxt.need_disable_connection_node, false); }