diff --git a/src/common/backend/utils/adt/pgstatfuncs.cpp b/src/common/backend/utils/adt/pgstatfuncs.cpp index a6ca813a8..6477d0429 100644 --- a/src/common/backend/utils/adt/pgstatfuncs.cpp +++ b/src/common/backend/utils/adt/pgstatfuncs.cpp @@ -15291,14 +15291,26 @@ Datum query_node_reform_info(PG_FUNCTION_ARGS) values[4] = BoolGetDatum(reform_info.reform_success); if (reform_info.reform_type == DMS_REFORM_TYPE_FOR_FAILOVER_OPENGAUSS) { - values[5] = TimestampTzGetDatum(reform_info.redo_start_time); - if (reform_info.redo_start_time > reform_info.redo_end_time) { + if (reform_info.redo_start_time == 0) { + nulls[5] = true; + } else { + values[5] = TimestampTzGetDatum(reform_info.redo_start_time); + } + if ((reform_info.redo_start_time > reform_info.redo_end_time) || reform_info.redo_end_time == 0) { nulls[6] = true; } else { values[6] = TimestampTzGetDatum(reform_info.redo_end_time); } - values[7] = UInt64GetDatum(reform_info.redo_total_bytes); - values[8] = TimestampTzGetDatum(reform_info.construct_hashmap); + if (reform_info.redo_total_bytes == 0) { + nulls[7] = true; + } else { + values[7] = UInt64GetDatum(reform_info.redo_total_bytes); + } + if (reform_info.construct_hashmap == 0) { + nulls[8] = true; + } else { + values[8] = TimestampTzGetDatum(reform_info.construct_hashmap); + } } else { values[7] = UInt64GetDatum(-1); nulls[5] = true; diff --git a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp index 1f19640b5..b755964b2 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp @@ -58,6 +58,14 @@ static void ReleaseResource(); +static inline void IniRedoInfo() +{ + g_instance.dms_cxt.SSReformInfo.redo_start_time = 0; + g_instance.dms_cxt.SSReformInfo.redo_end_time = 0; + g_instance.dms_cxt.SSReformInfo.construct_hashmap = 0; + g_instance.dms_cxt.SSReformInfo.redo_total_bytes = 0; +} + /* * Wake up startup process to replay WAL, or to notice that * failover has been requested. @@ -2069,6 +2077,7 @@ static void CBReformStartNotify(void *db_handle, dms_reform_start_context_t *rs_ reform_info->bitmap_nodes = rs_cxt->bitmap_participated; reform_info->bitmap_reconnect = rs_cxt->bitmap_reconnect; reform_info->dms_role = rs_cxt->role; + IniRedoInfo(); if (!ENABLE_SS_BCAST_GETOLDESTXMIN) { SSXminInfoPrepare(); }