@@ -140,6 +140,8 @@ HTAB* MtmXid2State;
140140static HTAB * MtmGid2State ;
141141static HTAB * MtmLocalTables ;
142142
143+ static bool MtmIsRecoverySession ;
144+
143145static MtmCurrentTrans MtmTx ;
144146
145147static TransactionManager MtmTM = {
@@ -1023,7 +1025,15 @@ static int64 MtmGetSlotLag(int nodeId)
10231025 */
10241026bool MtmIsRecoveredNode (int nodeId )
10251027{
1026- return BIT_CHECK (Mtm -> disabledNodeMask , nodeId - 1 );
1028+ if (BIT_CHECK (Mtm -> disabledNodeMask , nodeId - 1 )) {
1029+ if (!MtmIsRecoverySession ) {
1030+ elog (ERROR , "Node %d is marked as disabled but is not in recovery mode" , nodeId );
1031+ }
1032+ return true;
1033+ } else {
1034+ MtmIsRecoverySession = false; /* recovery is completed */
1035+ return false;
1036+ }
10271037}
10281038
10291039
@@ -1872,17 +1882,17 @@ static void
18721882MtmReplicationStartupHook (struct PGLogicalStartupHookArgs * args )
18731883{
18741884 ListCell * param ;
1875- bool isRecoverySession = false;
1885+ MtmIsRecoverySession = false;
18761886 foreach (param , args -> in_params )
18771887 {
18781888 DefElem * elem = lfirst (param );
18791889 if (strcmp ("mtm_replication_mode" , elem -> defname ) == 0 ) {
1880- isRecoverySession = elem -> arg != NULL && strVal (elem -> arg ) != NULL && strcmp (strVal (elem -> arg ), "recovery" ) == 0 ;
1890+ MtmIsRecoverySession = elem -> arg != NULL && strVal (elem -> arg ) != NULL && strcmp (strVal (elem -> arg ), "recovery" ) == 0 ;
18811891 break ;
18821892 }
18831893 }
18841894 MtmLock (LW_EXCLUSIVE );
1885- if (isRecoverySession ) {
1895+ if (MtmIsRecoverySession ) {
18861896 elog (WARNING , "%d: Node %d start recovery of node %d" , MyProcPid , MtmNodeId , MtmReplicationNodeId );
18871897 if (!BIT_CHECK (Mtm -> disabledNodeMask , MtmReplicationNodeId - 1 )) {
18881898 BIT_SET (Mtm -> disabledNodeMask , MtmReplicationNodeId - 1 );
0 commit comments