@@ -1349,6 +1349,7 @@ void MtmRecoveryCompleted(void)
13491349 MtmLock (LW_EXCLUSIVE );
13501350 Mtm -> recoverySlot = 0 ;
13511351 BIT_CLEAR (Mtm -> disabledNodeMask , MtmNodeId - 1 );
1352+ Mtm -> reconnectMask |= Mtm -> connectivityMask ; /* try to reestablish all connections */
13521353 Mtm -> nodes [MtmNodeId - 1 ].lastStatusChangeTime = MtmGetSystemTime ();
13531354 for (i = 0 ; i < Mtm -> nAllNodes ; i ++ ) {
13541355 Mtm -> nodes [i ].lastHeartbeat = 0 ; /* defuse watchdog until first heartbeat is received */
@@ -1469,6 +1470,7 @@ bool MtmRecoveryCaughtUp(int nodeId, XLogRecPtr slotLSN)
14691470void MtmSwitchClusterMode (MtmNodeStatus mode )
14701471{
14711472 Mtm -> status = mode ;
1473+ Mtm -> nodes [MtmNodeId - 1 ].lastStatusChangeTime = MtmGetSystemTime ();
14721474 MTM_LOG1 ("Switch to %s mode" , MtmNodeStatusMnem [mode ]);
14731475 /* ??? Something else to do here? */
14741476}
@@ -1603,11 +1605,10 @@ bool MtmRefreshClusterStatus(bool nowait, int testNodeId)
16031605 if (disabled ) {
16041606 timestamp_t now = MtmGetSystemTime ();
16051607 for (i = 0 , mask = disabled ; mask != 0 ; i ++ , mask >>= 1 ) {
1606- if (i + 1 != MtmNodeId
1607- && (mask & 1 ) != 0
1608- && Mtm -> nodes [i ].lastStatusChangeTime + MSEC_TO_USEC (MtmNodeDisableDelay ) < now )
1609- {
1610- MtmDisableNode (i + 1 );
1608+ if (mask & 1 ) {
1609+ if (Mtm -> nodes [i ].lastStatusChangeTime + MSEC_TO_USEC (MtmNodeDisableDelay ) < now ) {
1610+ MtmDisableNode (i + 1 );
1611+ }
16111612 }
16121613 }
16131614 }
@@ -1682,6 +1683,7 @@ void MtmOnNodeDisconnect(int nodeId)
16821683 MtmLock (LW_EXCLUSIVE );
16831684 BIT_SET (Mtm -> connectivityMask , nodeId - 1 );
16841685 BIT_SET (Mtm -> reconnectMask , nodeId - 1 );
1686+ MTM_LOG1 ("Disconnect node %d connectivity mask %lx" , nodeId , Mtm -> connectivityMask );
16851687 MtmUnlock ();
16861688
16871689 if (!RaftableSet (psprintf ("node-mask-%d" , MtmNodeId ), & Mtm -> connectivityMask , sizeof Mtm -> connectivityMask , false))
@@ -1726,7 +1728,7 @@ void MtmOnNodeConnect(int nodeId)
17261728 BIT_CLEAR (Mtm -> reconnectMask , nodeId - 1 );
17271729 MtmUnlock ();
17281730
1729- MTM_LOG1 ("Reconnect node %d" , nodeId );
1731+ MTM_LOG1 ("Reconnect node %d, connectivityMask=%lx " , nodeId , Mtm -> connectivityMask );
17301732 RaftableSet (psprintf ("node-mask-%d" , MtmNodeId ), & Mtm -> connectivityMask , sizeof Mtm -> connectivityMask , false);
17311733}
17321734
0 commit comments