@@ -229,6 +229,7 @@ static ExecutorFinish_hook_type PreviousExecutorFinishHook;
229229static  ProcessUtility_hook_type  PreviousProcessUtilityHook ;
230230static  shmem_startup_hook_type  PreviousShmemStartupHook ;
231231
232+ static  nodemask_t  lastKnownMatrix [MAX_NODES ];
232233
233234static  void  MtmExecutorFinish (QueryDesc  * queryDesc );
234235static  void  MtmProcessUtility (Node  * parsetree , const  char  * queryString ,
@@ -1551,7 +1552,8 @@ static bool
15511552MtmBuildConnectivityMatrix (nodemask_t *  matrix , bool  nowait )
15521553{
15531554	int  i , j , n  =  Mtm -> nAllNodes ;
1554- 	fprintf (stderr , "Connectivity matrix:\n" );
1555+ 	bool  changed  =  false;
1556+ 
15551557	for  (i  =  0 ; i  <  n ; i ++ ) { 
15561558		if  (i + 1  !=  MtmNodeId ) { 
15571559			void *  data  =  RaftableGet (psprintf ("node-mask-%d" , i + 1 ), NULL , NULL , nowait );
@@ -1562,12 +1564,27 @@ MtmBuildConnectivityMatrix(nodemask_t* matrix, bool nowait)
15621564		} else  { 
15631565			matrix [i ] =  Mtm -> connectivityMask ;
15641566		}
1565- 		for  (j  =  0 ; j  <  n ; j ++ ) { 
1566- 			putc (BIT_CHECK (matrix [i ], j ) ? 'X'  : '+' , stderr );
1567+ 
1568+ 		if  (lastKnownMatrix [i ] !=  matrix [i ])
1569+ 		{
1570+ 			changed  =  true;
1571+ 			lastKnownMatrix [i ] =  matrix [i ];
15671572		}
1568- 		putc ('\n' , stderr );
15691573	}
1570- 	fputs ("-----------------------\n" , stderr );
1574+ 
1575+ 	/* Print matrix if changed */ 
1576+ 	if  (changed )
1577+ 	{
1578+ 		fprintf (stderr , "Connectivity matrix:\n" );
1579+ 		for  (i  =  0 ; i  <  n ; i ++ )
1580+ 		{
1581+ 			for  (j  =  0 ; j  <  n ; j ++ )
1582+ 				putc (BIT_CHECK (matrix [i ], j ) ? 'X'  : '+' , stderr );
1583+ 			putc ('\n' , stderr );
1584+ 		}
1585+ 		fputs ("-----------------------\n" , stderr );
1586+ 	}
1587+ 
15711588	/* make matrix symetric: required for Bron–Kerbosch algorithm */ 
15721589	for  (i  =  0 ; i  <  n ; i ++ ) { 
15731590		for  (j  =  0 ; j  <  i ; j ++ ) { 
@@ -1576,8 +1593,9 @@ MtmBuildConnectivityMatrix(nodemask_t* matrix, bool nowait)
15761593		}
15771594		matrix [i ] &= ~((nodemask_t )1  << i );
15781595	}
1596+ 
15791597	return  true;
1580- }	 
1598+ }
15811599
15821600
15831601/** 
@@ -1598,6 +1616,11 @@ bool MtmRefreshClusterStatus(bool nowait, int testNodeId)
15981616	}
15991617
16001618	clique  =  MtmFindMaxClique (matrix , Mtm -> nAllNodes , & clique_size );
1619+ 
1620+ 	if  ( clique  ==  (~Mtm -> disabledNodeMask  &  (((nodemask_t )1  << Mtm -> nAllNodes )- 1 )) ) 
1621+ 		/* Nothing is changed */ 
1622+ 		return  false;
1623+ 
16011624	if  (clique_size  >= Mtm -> nAllNodes /2 + 1 ) { /* have quorum */ 
16021625		fprintf (stderr , "Old mask: " );
16031626		for  (i  =  0 ; i  <   Mtm -> nAllNodes ; i ++ ) { 
@@ -1728,7 +1751,7 @@ void MtmOnNodeDisconnect(int nodeId)
17281751			}
17291752		}
17301753		MtmUnlock ();
1731- 	} else  {  
1754+ 	} else  {
17321755		MtmRefreshClusterStatus (false, 0 );
17331756    }
17341757}
0 commit comments